From 843af6f4e9704ea3048ec74993d2fb2ec0b2351e Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Thu, 16 Mar 2017 16:41:13 +0100 Subject: [PATCH] cmake: enable c++11 when required --- CMakeLists.txt | 9 ++++----- benchmarks/benchmark_lib3mf/CMakeLists.txt | 6 ++---- examples/CMakeLists.txt | 2 ++ scripts/enable_cxx11.cmake | 18 ++++++++++++++++++ tests/fake_support/CMakeLists.txt | 2 ++ 5 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 scripts/enable_cxx11.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a6de08..04f40eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,8 @@ cmake_minimum_required(VERSION 2.8) #cmake_policy(SET CMP0018 NEW) +project(gmio) + include(CheckIncludeFiles) include(CheckFunctionExists) include(CheckSymbolExists) @@ -37,7 +39,6 @@ include(CheckCSourceCompiles) include(CheckTypeSize) include(CMakeDependentOption) -project(gmio) set(GMIO_VERSION_MAJOR 0) set(GMIO_VERSION_MINOR 4) set(GMIO_VERSION_PATCH 0) @@ -162,7 +163,7 @@ if(CMAKE_C_COMPILER_IS_GCC_COMPATIBLE) # Disable warnings -Wno-missing-braces -Wno-missing-field-initializers # in case GCC wrongly warns about universal zero initializer {0} # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119 - set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} -Werror=missing-braces") + set(CMAKE_REQUIRED_FLAGS "-Werror=missing-braces") check_c_source_compiles( "struct data { char array[128]; }; int main() { @@ -170,7 +171,7 @@ if(CMAKE_C_COMPILER_IS_GCC_COMPATIBLE) return d.array[0]; }" GMIO_GCC_DOESNT_WARN_UNIVERSAL_0_INITIALIZER) - set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS}") # Restore CMAKE_REQUIRED_FLAGS + set(CMAKE_REQUIRED_FLAGS) # Popup changes if (NOT GMIO_GCC_DOESNT_WARN_UNIVERSAL_0_INITIALIZER) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces -Wno-missing-field-initializers") endif() @@ -214,8 +215,6 @@ if(MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Oi") endif() -set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS}") - # Some compilers (like GCC v4.9) don't disable when needed check_include_files(stdint.h GMIO_HAVE_STDINT_H) diff --git a/benchmarks/benchmark_lib3mf/CMakeLists.txt b/benchmarks/benchmark_lib3mf/CMakeLists.txt index e27c071..4276797 100644 --- a/benchmarks/benchmark_lib3mf/CMakeLists.txt +++ b/benchmarks/benchmark_lib3mf/CMakeLists.txt @@ -27,13 +27,11 @@ ## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ############################################################################# +include(../../scripts/enable_cxx11.cmake) + set(ROOTDIR_LIB3MF ${CMAKE_SOURCE_DIR} CACHE PATH "Directory where the Lib3MF library resides") -if(CMAKE_C_COMPILER_IS_GCC_COMPATIBLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -endif() - include_directories(${ROOTDIR_LIB3MF}/Include) add_executable(benchmark_lib3mf main.cpp ${COMMONS_FILES}) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index ef9159d..0e75242 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -27,6 +27,8 @@ ## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ############################################################################# +include(../scripts/enable_cxx11.cmake) + include_directories(${CMAKE_SOURCE_DIR}/src) include_directories(${CMAKE_BINARY_DIR}/src/gmio_core) # For cmake generated headers include_directories(${CMAKE_SOURCE_DIR}/tests/fake_support/opencascade) diff --git a/scripts/enable_cxx11.cmake b/scripts/enable_cxx11.cmake new file mode 100644 index 0000000..2503c21 --- /dev/null +++ b/scripts/enable_cxx11.cmake @@ -0,0 +1,18 @@ +include(CheckCXXCompilerFlag) + +if(CMAKE_COMPILER_IS_GNUCXX + OR CMAKE_CXX_COMPILER MATCHES ".*clang") + check_cxx_compiler_flag("-std=c++11" GMIO_COMPILER_SUPPORTS_CXX11) + if(GMIO_COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + else() + check_cxx_compiler_flag("-std=c++0x" GMIO_COMPILER_SUPPORTS_CXX0X) + if(GMIO_COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") + else() + message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support") + endif() + endif() +endif() + +# Note : cmake 3.1 introduced set_property(TARGET tgt PROPERTY CXX_STANDARD 11) diff --git a/tests/fake_support/CMakeLists.txt b/tests/fake_support/CMakeLists.txt index 6dd8b2e..c994eeb 100644 --- a/tests/fake_support/CMakeLists.txt +++ b/tests/fake_support/CMakeLists.txt @@ -27,6 +27,8 @@ ## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ############################################################################# +include(../../scripts/enable_cxx11.cmake) + file(GLOB GMIO_FAKEOCC_HEADERS opencascade/*.hxx opencascade/*.h) set(GMIO_FAKEOCC_HEADERS ${GMIO_FAKEOCC_HEADERS})