Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2cb82ec

Browse files
committed
Build: Clean up and modernize cmake scripts
1 parent73d4024 commit2cb82ec

File tree

8 files changed

+298
-460
lines changed

8 files changed

+298
-460
lines changed

‎CMakeLists.txt‎

Lines changed: 117 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
# (See accompanying file LICENSE_1_0.txt or copy at
55
# http://www.boost.org/LICENSE_1_0.txt)
66

7-
cmake_minimum_required(VERSION2.8)
8-
project(CPP-NETLIB)
7+
cmake_minimum_required(VERSION3.5 FATAL_ERROR)
8+
project(CPP-NETLIB CXX)
99

1010
option( CPP-NETLIB_BUILD_SHARED_LIBS"Build cpp-netlib as shared libraries."OFF )
1111
option( CPP-NETLIB_BUILD_TESTS"Build the cpp-netlib project tests."ON)
@@ -42,22 +42,25 @@ endif()
4242
# Use Boost's static libraries
4343
if (CPP-NETLIB_STATIC_BOOST)
4444
set(Boost_USE_STATIC_LIBSON)
45+
else()
46+
# We need this for all tests to use the dynamic version.
47+
set_property(DIRECTORYAPPEND PROPERTYCOMPILE_DEFINITIONS BOOST_ALL_DYN_LINK)
4548
endif()
4649

47-
#We need this forall tests to use the dynamic version.
48-
add_definitions(-DBOOST_TEST_DYN_LINK)
50+
#The interface target forpublic usage requirements
51+
add_library(cppnetlibINTERFACE)
4952

5053
# Always use multi-threaded Boost libraries.
51-
set(Boost_USE_MULTI_THREADEDON)
54+
set(Boost_USE_MULTITHREADEDON)
5255

53-
find_package(Boost 1.58.0 REQUIRED COMPONENTSsystem thread)
56+
find_package(Boost 1.58.0 REQUIRED COMPONENTSsystem threadregex)
5457

5558
if (CPP-NETLIB_ENABLE_HTTPS)
5659
if (APPLE)
5760
# If we're on OS X check for Homebrew's copy of OpenSSL instead of Apple's
5861
if (NOT OpenSSL_DIR)
5962
find_program(HOMEBREW brew)
60-
if (HOMEBREWSTREQUAL"HOMEBREW-NOTFOUND")
63+
if (NOTHOMEBREW)
6164
message(WARNING"Homebrew not found: not using Homebrew's OpenSSL")
6265
if (NOT OPENSSL_ROOT_DIR)
6366
message(WARNING"Use -DOPENSSL_ROOT_DIR for non-Apple OpenSSL")
@@ -69,109 +72,134 @@ if (CPP-NETLIB_ENABLE_HTTPS)
6972
endif()
7073
endif()
7174
endif()
75+
76+
if (CPP-NETLIB_STATIC_OPENSSL)
77+
set(OPENSSL_USE_STATIC_LIBSTRUE)
78+
endif()
79+
80+
find_package(OpenSSL REQUIRED)
81+
target_compile_definitions(cppnetlibINTERFACE BOOST_NETWORK_ENABLE_HTTPS)
7282
if (CPP-NETLIB_STATIC_OPENSSL)
73-
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
83+
target_link_libraries(cppnetlibINTERFACE${CMAKE_DL_LIBS})
7484
endif()
75-
find_package(OpenSSL)
7685
endif()
7786

78-
find_package( Threads )
87+
7988
set(CMAKE_VERBOSE_MAKEFILEtrue)
8089

8190
set(CPPNETLIB_VERSION_MAJOR 0)# MUST bump this whenever we make ABI-incompatible changes
8291
set(CPPNETLIB_VERSION_MINOR 13)
8392
set(CPPNETLIB_VERSION_PATCH 0)
8493
set(CPPNETLIB_VERSION_STRING${CPPNETLIB_VERSION_MAJOR}.${CPPNETLIB_VERSION_MINOR}.${CPPNETLIB_VERSION_PATCH})
8594

86-
if (CMAKE_BUILD_TYPEMATCHES Debug)
87-
add_definitions(-DBOOST_NETWORK_DEBUG)
88-
endif()
95+
set_property(DIRECTORYAPPEND PROPERTYCOMPILE_DEFINITIONS $<$<CONFIG:Debug>:BOOST_NETWORK_DEBUG>)
8996

90-
if (OPENSSL_FOUND)
91-
add_definitions(-DBOOST_NETWORK_ENABLE_HTTPS)
92-
include_directories(${OPENSSL_INCLUDE_DIR})
97+
# Use C++11
98+
if (CMAKE_VERSIONVERSION_LESS 3.8)
99+
set(CMAKE_CXX_STANDARD 11)
100+
set(CMAKE_CXX_STANDARD_REQUIREDON)
101+
else()
102+
target_compile_features(cppnetlibINTERFACE cxx_std_11)
93103
endif()
94104

95-
if (${CMAKE_CXX_COMPILER_ID}MATCHES GNU)
96-
# Use C++11 when using GNU compilers.
97-
set (CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -Wall -std=c++11")
98-
elseif (${CMAKE_CXX_COMPILER_ID}MATCHES Clang)
99-
# We want to link in C++11 mode in Clang too, but also set a high enough
100-
# template depth for the template metaprogramming.
101-
set (CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -Wall -ftemplate-depth=256 -std=c++11")
102-
if (${CMAKE_SYSTEM_NAME}MATCHES"Darwin")
105+
if (CMAKE_CXX_COMPILER_IDMATCHES"GNU")
106+
add_compile_options(-Wall)
107+
elseif(CMAKE_CXX_COMPILER_IDMATCHES"Clang")
108+
# A high enough template depth for the template metaprogramming.
109+
add_compile_options(-Wall -ftemplate-depth=256)
110+
if (CMAKE_SYSTEM_NAMEMATCHES"Darwin")
103111
# Use libc++ only in OS X.
104-
set (CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}-stdlib=libc++")
105-
set(CMAKE_EXE_LINKER_FLAGS"${CMAKE_EXE_LINKER_FLAGS} -lc++")
112+
add_compile_options(-stdlib=libc++)
113+
set(CMAKE_EXE_LINKER_FLAGS"${CMAKE_EXE_LINKER_FLAGS} -lc++")
106114
endif()
107115
endif()
108116

109117

110-
if (MSVC)
111-
set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} /bigobj")
112-
set(gtest_force_shared_crttrue)
118+
if (WIN32)
119+
target_compile_definitions(cppnetlibINTERFACE _WIN32_WINNT=0x0501)
120+
121+
if (MSVC)
122+
target_compile_options(cppnetlibINTERFACE /bigobj)
123+
target_compile_definitions(cppnetlibINTERFACE _SCL_SECURE_NO_WARNINGS)
124+
endif()
125+
126+
if (MINGW)
127+
target_link_libraries(cppnetlibINTERFACE ws2_32 wsock32)
128+
endif()
113129
endif()
114130

115-
if (Boost_FOUND)
116-
if (MSVC)
117-
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
118-
endif(MSVC)
119-
if (WIN32)
120-
add_definitions(-D_WIN32_WINNT=0x0501)
121-
endif(WIN32)
122-
include_directories(${Boost_INCLUDE_DIRS})
123-
link_directories(${Boost_LIBRARY_DIRS})
124-
125-
enable_testing()
126-
add_subdirectory(libs/network/src)
127-
if (CPP-NETLIB_BUILD_TESTS)
128-
add_subdirectory(deps/googletest)
129-
add_subdirectory(libs/network/test)
130-
endif (CPP-NETLIB_BUILD_TESTS)
131-
if (CPP-NETLIB_BUILD_EXAMPLES)
132-
add_subdirectory(libs/network/example)
133-
endif (CPP-NETLIB_BUILD_EXAMPLES)
134-
endif(Boost_FOUND)
135-
136-
enable_testing()
137-
138-
set(CPP-NETLIB_LIBRARIES${Boost_LIBRARIES}CACHEINTERNAL"Dependent libraries for header-only use")
139-
140-
install(DIRECTORY boostDESTINATION${CMAKE_INSTALL_INCLUDEDIR})
141-
142-
###
143-
## Export Targets
144-
# (so cpp-netlib can be easily used by other CMake projects)
145-
# [see http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file]
146-
147-
# Add all targets to the build-tree export set
148-
export(TARGETS cppnetlib-client-connections cppnetlib-server-parsers cppnetlib-uri
149-
FILE"${PROJECT_BINARY_DIR}/cppnetlibTargets.cmake")
150-
# Export the package for use from the build-tree
151-
# (this registers the build-tree with a global CMake-registry)
152-
export(PACKAGE cppnetlib)
153-
# Create the cppnetlibConfig.cmake and cppnetlibConfigVersion files
154-
file(RELATIVE_PATH REL_INCLUDE_DIR"${INSTALL_CMAKE_DIR}"
155-
"${CMAKE_INSTALL_FULL_INCLUDEDIR}")
156-
# ... for the build tree
157-
set(CONF_INCLUDE_DIRS"${PROJECT_SOURCE_DIR}"${Boost_INCLUDE_DIRS})
158-
configure_file(cppnetlibConfig.cmake.in
159-
"${PROJECT_BINARY_DIR}/cppnetlibConfig.cmake" @ONLY)
160-
# ... for the install tree
161-
set(CONF_INCLUDE_DIRS"\${CPPNETLIB_CMAKE_DIR}/${REL_INCLUDE_DIR}")
162-
set(CONF_INCLUDE_DIRS${CONF_INCLUDE_DIRS}${Boost_INCLUDE_DIRS})
131+
target_include_directories(cppnetlibINTERFACE
132+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
133+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
134+
135+
find_package(Threads REQUIRED)
136+
target_link_libraries(cppnetlibINTERFACE Boost::thread Threads::Threads)
137+
138+
install(TARGETS cppnetlib EXPORT cppnetlibTargets)
139+
140+
add_subdirectory(libs/network/src)
141+
142+
add_library(cppnetlib::cppnetlib ALIAS cppnetlib)
143+
add_library(cppnetlib::uri ALIAS uri)
144+
add_library(cppnetlib::server-parsers ALIAS server-parsers)
145+
add_library(cppnetlib::client-connections ALIAS client-connections)
146+
147+
if (CPP-NETLIB_BUILD_TESTS)
148+
enable_testing()
149+
150+
if (MSVC)
151+
set(gtest_force_shared_crtONCACHEBOOL"Use shared (DLL) run-time lib even when Google Test is built as static lib.")
152+
endif()
153+
154+
add_subdirectory(deps/googletest)
155+
156+
if (MSVC)
157+
target_compile_definitions(gtestPUBLIC _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING)
158+
target_compile_definitions(gtest_mainPUBLIC _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING)
159+
target_compile_definitions(gmockPUBLIC _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING)
160+
target_compile_definitions(gmock_mainPUBLIC _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING)
161+
endif()
162+
163+
add_subdirectory(libs/network/test)
164+
endif()
165+
166+
if (CPP-NETLIB_BUILD_EXAMPLES)
167+
add_library(cxxoptsINTERFACE)
168+
target_include_directories(cxxoptsINTERFACE deps/cxxopts/src)
169+
170+
add_subdirectory(libs/network/example)
171+
endif ()
172+
173+
install(DIRECTORY boostDESTINATION${CMAKE_INSTALL_INCLUDEDIR}COMPONENT dev)
174+
175+
###
176+
## Export Targets
177+
# (so cpp-netlib can be easily used by other CMake projects)
178+
# [see http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file]
179+
180+
# Add all targets to the build-tree export set
181+
export(EXPORT cppnetlibTargets
182+
FILE"${CMAKE_CURRENT_BINARY_DIR}/cppnetlibTargets.cmake"
183+
NAMESPACE cppnetlib::)
163184
configure_file(cppnetlibConfig.cmake.in
164-
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cppnetlibConfig.cmake" @ONLY)
165-
# ... for both
166-
configure_file(cppnetlibConfigVersion.cmake.in
167-
"${PROJECT_BINARY_DIR}/cppnetlibConfigVersion.cmake" @ONLY)
168-
# Install the cppnetlibConfig.cmake and cppnetlibConfigVersion.cmake
185+
"${CMAKE_CURRENT_BINARY_DIR}/cppnetlibConfig.cmake" @ONLY)
186+
187+
# Export the package for use from the build-tree
188+
# (this registers the build-tree with a global CMake-registry)
189+
export(PACKAGE cppnetlib)
190+
191+
include(CMakePackageConfigHelpers)
192+
write_basic_package_version_file(cppnetlibConfigVersion.cmakeVERSION${CPPNETLIB_VERSION_STRING} COMPATIBILITY AnyNewerVersion)
193+
194+
# Install the cppnetlibConfig.cmake and cppnetlibConfigVersion.cmake
169195
install(FILES
170-
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cppnetlibConfig.cmake"
171-
"${PROJECT_BINARY_DIR}/cppnetlibConfigVersion.cmake"
196+
"${PROJECT_BINARY_DIR}/cppnetlibConfig.cmake"
197+
"${PROJECT_BINARY_DIR}/cppnetlibConfigVersion.cmake"
172198
DESTINATION"${INSTALL_CMAKE_DIR}"
173-
COMPONENT dev)
174-
# Install the export set for use with the install-tree
175-
install(EXPORT cppnetlibTargets
176-
DESTINATION"${INSTALL_CMAKE_DIR}"
177-
COMPONENT dev)
199+
COMPONENT dev)
200+
201+
# Install the export set for use with the install-tree
202+
install(EXPORT cppnetlibTargets
203+
FILE cppnetlibTargets.cmake
204+
NAMESPACE cppnetlib::
205+
DESTINATION"${INSTALL_CMAKE_DIR}")

‎cppnetlibConfig.cmake.in‎

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,38 @@
1-
# - Config file for the cppnetlib package
2-
# It defines the following variables
3-
# CPPNETLIB_INCLUDE_DIRS - include directories for cppnetlib
4-
# CPPNETLIB_LIBRARIES - libraries to link against
5-
# CPPNETLIB_EXECUTABLE - the bar executable
6-
7-
# Compute paths
8-
get_filename_component(CPPNETLIB_CMAKE_DIR"${CMAKE_CURRENT_LIST_FILE}"PATH)
9-
set(CPPNETLIB_INCLUDE_DIRS"@CONF_INCLUDE_DIRS@")
10-
11-
# Our library dependencies (contains definitions for IMPORTED targets)
12-
if(NOTTARGET cppnetlib-client-connections
13-
ANDNOTTARGET cppnetlib-server-parsers
14-
ANDNOTTARGET cppnetlib-uri
15-
ANDNOTCPPNETLIB_BINARY_DIR)
16-
include("${CPPNETLIB_CMAKE_DIR}/cppnetlibTargets.cmake")
1+
# - Config file for the cppnetlib package
2+
# It defines the following variables targets
3+
# cppnetlib::cppnetlib - include directories and usage requirements for cppnetlib
4+
# Libraries and usage requirements^
5+
# cppnetlib::uri
6+
# cppnetlib::server-parsers
7+
# cppnetlib::client-connections
8+
# Variables
9+
# CPPNETLIB_INCLUDE_DIRS - include directories for cppnetlib (empty, usage requirements propageted through libraries)
10+
# CPPNETLIB_LIBRARIES - libraries to link against
11+
12+
set(CPP-NETLIB_STATIC_BOOST @CPP-NETLIB_STATIC_BOOST@)
13+
set(CPP-NETLIB_ENABLE_HTTPS @CPP-NETLIB_ENABLE_HTTPS@)
14+
set(CPP-NETLIB_STATIC_OPENSSL @CPP-NETLIB_STATIC_OPENSSL@)
15+
16+
# Use Boost's static libraries
17+
if (CPP-NETLIB_STATIC_BOOST)
18+
set(Boost_USE_STATIC_LIBSON)
19+
endif()
20+
21+
# Always use multi-threaded Boost libraries.
22+
set(Boost_USE_MULTITHREADEDON)
23+
24+
if (CPP-NETLIB_ENABLE_HTTPS)
25+
if (CPP-NETLIB_STATIC_OPENSSL)
26+
set(OPENSSL_USE_STATIC_LIBSTRUE)
27+
endif()
28+
29+
find_package(OpenSSL REQUIRED)
1730
endif()
1831

19-
# These are IMPORTED targets created by cppnetlibTargets.cmake
20-
set(CPPNETLIB_LIBRARIES
21-
cppnetlib-client-connections
22-
cppnetlib-server-parsers
23-
cppnetlib-uri)
24-
#set(CPPNETLIB_EXECUTABLE ...) # maybe the examples?
32+
find_package(Boost 1.58.0 REQUIRED COMPONENTSsystem threadregex)
33+
find_package(Threads)
34+
35+
include("${CMAKE_CURRENT_LIST_DIR}/cppnetlibTargets.cmake")
36+
37+
set(CPPNETLIB_INCLUDE_DIRS)
38+
set(CPPNETLIB_LIBRARIES cppnetlib::client-connections cppnetlib::server-parsers cppnetlib::uri)

‎cppnetlibConfigVersion.cmake.in‎

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp