Skip to content

Commit 749c17f

Browse files
authored
Merge pull request #132 from prateek9623/master
Update CMake code for installing target
2 parents 906c259 + d9857a9 commit 749c17f

File tree

4 files changed

+74
-58
lines changed

4 files changed

+74
-58
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ build.log
1010
.idea/
1111
cmake-build-debug/
1212
cmake-build-debug-visual-studio/
13+
.vscode
14+
install

CMake/curlcppConfig.cmake.in

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# curlcppConfig.cmake - Configuration file for external projects.
2+
@PACKAGE_INIT@
3+
include(CMakeFindDependencyMacro)
4+
find_dependency(CURL CONFIG REQUIRED)
25

3-
set(CURLCPP_INCLUDE_DIRS "@CURLCPP_SOURCE_DIR@/include")
4-
set(CURLCPP_LIBRARY_DIRS "@CURLCPP_BINARY_DIR@/src")
5-
set(CURLCPP_LIBRARIES "@CURLCPP_LIB_LOCATION@")
6+
include("${CMAKE_CURRENT_LIST_DIR}/curlcppTargets.cmake")

CMakeLists.txt

Lines changed: 51 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,51 @@
1-
cmake_minimum_required(VERSION 3.11...3.15)
2-
3-
include(GNUInstallDirs)
4-
5-
#if using an older VERSION of curl ocsp stapling can be disabled
6-
set(CURL_MIN_VERSION "7.28.0")
7-
8-
# Setting up project
9-
project(curlcpp LANGUAGES CXX)
10-
11-
set(DEFAULT_BUILD_TYPE "Release")
12-
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
13-
message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
14-
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE
15-
STRING "Choose the type of build." FORCE)
16-
# Set the possible values of build type for cmake-gui
17-
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
18-
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
19-
endif()
20-
21-
include(CheckIPOSupported)
22-
check_ipo_supported(RESULT IPO_SUPPORTED OUTPUT ERROR)
23-
24-
if(IPO_SUPPORTED)
25-
message(STATUS "IPO / LTO supported, will enable for targets in release build type")
26-
else()
27-
message(STATUS "IPO / LTO not supported: <${ERROR}>, will not enable")
28-
endif()
29-
30-
option(CURLCPP_USE_PKGCONFIG
31-
"Use pkg-config to find libcurl. When off, find_package() will be used" OFF)
32-
33-
# Set up source directories
34-
add_subdirectory(src)
35-
36-
# Set up test directory.
37-
add_subdirectory(test)
38-
39-
# Set library location
40-
set(CURLCPP_LIB_LOCATION "$<TARGET_FILE:${curlcpp}>")
41-
42-
configure_file(CMake/curlcppConfig.cmake.in
43-
${CMAKE_BINARY_DIR}/curlcppConfig.cmake @ONLY)
44-
install (FILES ${CMAKE_BINARY_DIR}/curlcppConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/curlcpp)
1+
cmake_minimum_required(VERSION 3.11...3.15)
2+
3+
# Setting up project
4+
project(curlcpp LANGUAGES CXX)
5+
6+
include(GNUInstallDirs)
7+
8+
set(BUILD_TEST "Build Tests" OFF)
9+
10+
#if using an older VERSION of curl ocsp stapling can be disabled
11+
set(CURL_MIN_VERSION "7.28.0")
12+
13+
set(DEFAULT_BUILD_TYPE "Release")
14+
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
15+
message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
16+
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE
17+
STRING "Choose the type of build." FORCE)
18+
# Set the possible values of build type for cmake-gui
19+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
20+
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
21+
endif()
22+
23+
include(CheckIPOSupported)
24+
check_ipo_supported(RESULT IPO_SUPPORTED OUTPUT ERROR)
25+
26+
if(IPO_SUPPORTED)
27+
message(STATUS "IPO / LTO supported, will enable for targets in release build type")
28+
else()
29+
message(STATUS "IPO / LTO not supported: <${ERROR}>, will not enable")
30+
endif()
31+
32+
option(CURLCPP_USE_PKGCONFIG
33+
"Use pkg-config to find libcurl. When off, find_package() will be used" OFF)
34+
35+
# Set up source directories
36+
add_subdirectory(src)
37+
38+
# Set up test directory.
39+
if(BUILD_TEST)
40+
add_subdirectory(test)
41+
endif()
42+
43+
# Install
44+
install(EXPORT curlcppTargets
45+
NAMESPACE curlcpp::
46+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/curlcpp)
47+
include(CMakePackageConfigHelpers)
48+
configure_package_config_file(CMake/curlcppConfig.cmake.in
49+
"${PROJECT_BINARY_DIR}/curlcppConfig.cmake"
50+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/curlcpp")
51+
install(FILES ${PROJECT_BINARY_DIR}/curlcppConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/curlcpp)

src/CMakeLists.txt

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ set(CURLCPP_HEADER_LIST
2323
../include/curl_utility.h
2424
)
2525

26-
add_library(curlcpp)
27-
28-
target_sources(curlcpp
29-
PRIVATE
26+
add_library(curlcpp
3027
curl_easy.cpp
3128
curl_header.cpp
3229
curl_global.cpp
@@ -40,11 +37,14 @@ PRIVATE
4037
cookie_date.cpp
4138
cookie_time.cpp
4239
cookie_datetime.cpp
43-
PUBLIC
4440
${CURLCPP_HEADER_LIST}
4541
)
4642

47-
target_include_directories(curlcpp PUBLIC ../include)
43+
add_library(curlcpp::curlcpp ALIAS curlcpp)
44+
45+
target_include_directories(curlcpp PUBLIC
46+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../include>"
47+
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/>")
4848

4949
target_compile_features(curlcpp PUBLIC cxx_std_11)
5050

@@ -56,17 +56,17 @@ target_compile_options(curlcpp PRIVATE
5656

5757
if(CURLCPP_USE_PKGCONFIG)
5858
find_package(PkgConfig REQUIRED)
59-
pkg_check_modules(libcurl REQUIRED IMPORTED_TARGET libcurl>=${CURL_MIN_VERSION})
59+
pkg_check_modules(libcurl REQUIRED IMPORTED_TARGET libcurl>=${CURL_MIN_VERSION})
6060
target_link_libraries(curlcpp PUBLIC PkgConfig::libcurl)
6161
else()
6262
# Add MacPorts
6363
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
6464
set(CMAKE_PREFIX_PATH /opt/local ${CMAKE_PREFIX_PATH})
6565
endif()
66-
66+
6767
find_package(CURL ${CURL_MIN_VERSION} REQUIRED)
6868

69-
target_include_directories(curlcpp PUBLIC ${CURL_INCLUDE_DIRS})
69+
target_include_directories(curlcpp PUBLIC ${CURL_INCLUDE_DIRS})
7070
target_link_libraries(curlcpp PUBLIC ${CURL_LIBRARY})
7171
endif()
7272

@@ -78,5 +78,11 @@ if(IPO_SUPPORTED AND CMAKE_BUILD_TYPE STREQUAL "Release")
7878
set_target_properties(curlcpp PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
7979
endif()
8080

81-
install (TARGETS curlcpp LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
82-
install (FILES ${CURLCPP_HEADER_LIST} DESTINATION include/curlcpp)
81+
set_target_properties (curlcpp PROPERTIES PUBLIC_HEADER "${CURLCPP_HEADER_LIST}")
82+
83+
include(GNUInstallDirs)
84+
install(TARGETS curlcpp
85+
EXPORT ${PROJECT_NAME}Targets
86+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/
87+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
88+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

0 commit comments

Comments
 (0)