diff --git a/CMakeLists.txt b/CMakeLists.txt index 2619071..2820bd4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,18 +41,35 @@ if(MSVC) set(CMAKE_GNUtoMS ON) endif() -macro(use_cxx11) - if(CMAKE_VERSION VERSION_LESS "3.1") - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") - endif() - else() - set(CMAKE_CXX_STANDARD 11) - endif() -endmacro(use_cxx11) +if(NOT (CMAKE_CXX_COMPILER_LAUNCHER MATCHES "ccache") AND NOT (CMAKE_C_COMPILER_LAUNCHER MATCHES "ccache")) + find_program(ccache_EXECUTABLE ccache) + if(ccache_EXECUTABLE) + set(CMAKE_C_COMPILER_LAUNCHER ${ccache_EXECUTABLE}) + set(CMAKE_CXX_COMPILER_LAUNCHER ${ccache_EXECUTABLE}) + add_custom_target(ccache-stats + COMMAND ${ccache_EXECUTABLE} --show-stats + ) + else() + add_custom_target(ccache-stats + COMMAND echo "ccache not found." + ) + endif(ccache_EXECUTABLE) +endif() -# ensure C++11 -use_cxx11() +macro(use_cxx11 target) + if(CMAKE_VERSION VERSION_LESS "3.1") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(${target} PRIVATE "-std=gnu++11") + else() + target_compile_options(${target} PRIVATE "-std=c++11") + endif() + else() + set_target_properties(${target} PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON + ) + endif() +endmacro(use_cxx11) find_package(Boost REQUIRED COMPONENTS system thread random) if(APPLE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index eeb852e..2235c6c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,11 +18,13 @@ file(GLOB_RECURSE CPP_CLIENT_CORE_SRC ) add_library(etcd-cpp-api-core-objects OBJECT ${CPP_CLIENT_CORE_SRC} ${PROTOBUF_GENERATES}) +use_cxx11(etcd-cpp-api-core-objects) add_dependencies(etcd-cpp-api-core-objects protobuf_generates) include_generated_protobuf_files(etcd-cpp-api-core-objects) # add the core library, includes the sycnhronous client only add_library(etcd-cpp-api-core $) +use_cxx11(etcd-cpp-api-core) target_link_libraries(etcd-cpp-api-core PUBLIC ${Boost_LIBRARIES} ${PROTOBUF_LIBRARIES} @@ -34,6 +36,7 @@ include_generated_protobuf_files(etcd-cpp-api-core) # add the client with asynchronus client add_library(etcd-cpp-api $ "${CMAKE_CURRENT_SOURCE_DIR}/Client.cpp") +use_cxx11(etcd-cpp-api) target_link_libraries(etcd-cpp-api PUBLIC ${Boost_LIBRARIES} ${CPPREST_LIB} # n.b.: the asynchronous client requires pplx in cpprestsdk diff --git a/tst/CMakeLists.txt b/tst/CMakeLists.txt index ecae58f..6770b5a 100644 --- a/tst/CMakeLists.txt +++ b/tst/CMakeLists.txt @@ -18,6 +18,7 @@ foreach(testfile ${TEST_FILES}) else() add_executable(${test_name} EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/${testfile}) endif() + use_cxx11(${test_name}) add_test(NAME ${test_name} COMMAND $) target_include_directories(${test_name} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../proto/gen)