From f995e594231cb4796ed7ce0f3ee1bd437f03575d Mon Sep 17 00:00:00 2001 From: Kirill Kirilenko Date: Sat, 26 Nov 2016 03:01:12 +0300 Subject: [PATCH] Added CMake function RequireCXX14(). Fixed double compiler flags. --- CMakeLists.txt | 25 ++----------------------- cmake/RequireCXX14.cmake | 26 ++++++++++++++++++++++++++ src/CMakeLists.txt | 3 +++ tests/CMakeLists.txt | 3 +++ 4 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 cmake/RequireCXX14.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c116f48..7832f08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,34 +1,13 @@ cmake_minimum_required(VERSION 2.8) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} cmake) + if (NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Type of build (Release, Debug, RelWithDebInfo, MinSizeRel)") endif() project(telebotxx CXX) -message(STATUS "Checking compiler flags for C++14 support.") -# Set C++14 support flags for various compilers -include(CheckCXXCompilerFlag) -check_cxx_compiler_flag("-std=c++14" COMPILER_SUPPORTS_CXX14) -check_cxx_compiler_flag("-std=c++1y" COMPILER_SUPPORTS_CXX1Y) -if(COMPILER_SUPPORTS_CXX14) - message(STATUS "C++14 is supported.") - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -stdlib=libc++") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") - endif() -elseif(COMPILER_SUPPORTS_CXX1Y) - message(STATUS "C++1y is supported.") - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -stdlib=libc++") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y") - endif() -else() - message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.") -endif() - option (TELEBOTXX_BUILD_TESTS "Build unit tests using Boost.Test" ON) option (TELEBOTXX_GENERATE_DOC "Generate API documentation with Doxygen" ON) diff --git a/cmake/RequireCXX14.cmake b/cmake/RequireCXX14.cmake new file mode 100644 index 0000000..6d4d575 --- /dev/null +++ b/cmake/RequireCXX14.cmake @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 2.8) + +function(RequireCXX14) + message(STATUS "Checking compiler flags for C++14 support.") + # Set C++14 support flags for various compilers + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-std=c++14" COMPILER_SUPPORTS_CXX14) + check_cxx_compiler_flag("-std=c++1y" COMPILER_SUPPORTS_CXX1Y) + if(COMPILER_SUPPORTS_CXX14) + message(STATUS "C++14 is supported.") + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -stdlib=libc++" PARENT_SCOPE) + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14" PARENT_SCOPE) + endif() + elseif(COMPILER_SUPPORTS_CXX1Y) + message(STATUS "C++1y is supported.") + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y -stdlib=libc++" PARENT_SCOPE) + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y" PARENT_SCOPE) + endif() + else() + message(ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.") + endif() +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ef3bcdb..962f235 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 2.8) message(STATUS "Configuring telebotxx") +include(${CMAKE_SOURCE_DIR}/cmake/RequireCXX14.cmake) +RequireCXX14() + find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 938f666..6e54dbe 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,6 +5,9 @@ endif() message(STATUS "Configuring telebotxx-test") +include(${CMAKE_SOURCE_DIR}/cmake/RequireCXX14.cmake) +RequireCXX14() + add_definitions(-DBOOST_TEST_DYN_LINK) find_package(Boost REQUIRED COMPONENTS unit_test_framework system) include_directories(${Boost_INCLUDE_DIRS})