From 691fd1cd0cab0666ce3227a1db20d3cf543fe65c Mon Sep 17 00:00:00 2001 From: Tiago Macarios Date: Mon, 17 Apr 2017 21:04:43 -0700 Subject: [PATCH] Make CMakeLists.txt current to CMake 3.8 features This commit updates the CMake files to use newer CMake features. GSL is now a INTERFACE and one only need to link against that interface (include paths and natvis files will be taken care automatically). Whene generating a VS project test will be properly nested into a test subfolder. if(compiler) expression were modified to generator expressions. --- CMakeLists.txt | 18 +++++++++++--- tests/CMakeLists.txt | 59 +++++++++++++++++++++++++++----------------- 2 files changed, 50 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b96546..42813b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,20 @@ -cmake_minimum_required(VERSION 2.8.7) +cmake_minimum_required(VERSION 3.8.0) project(GSL CXX) -install( - DIRECTORY include/gsl - DESTINATION include +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +add_library(cppGSL INTERFACE) +set(CMAKE_CXX_EXTENSIONS OFF) +target_compile_features(cppGSL INTERFACE cxx_std_14) + +target_include_directories(cppGSL INTERFACE + $ + $ +) + +target_sources(cppGSL INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/GSL.natvis ) enable_testing() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b56cc26..be63927 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,36 +1,47 @@ -cmake_minimum_required(VERSION 2.8.7) +cmake_minimum_required(VERSION 3.8.0) project(GSLTests CXX) if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/unittest-cpp/tests) - execute_process(COMMAND git submodule update --init WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + find_package(Git) + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") endif() add_subdirectory(unittest-cpp) -include_directories( - ../include - ./unittest-cpp +add_library(unittest_cpp INTERFACE) +target_include_directories(unittest_cpp INTERFACE + $ ) -add_definitions(-DGSL_THROW_ON_CONTRACT_VIOLATION) - -if(MSVC) # has the support we need - # remove unnecessary warnings about unchecked iterators - add_definitions(-D_SCL_SECURE_NO_WARNINGS) - add_compile_options(/EHsc /W4 /WX) -else() - include(CheckCXXCompilerFlag) - CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14) - CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) - if(COMPILER_SUPPORTS_CXX14) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -std=c++14 -Werror -Wall -Wextra -Wpedantic -Wno-missing-braces -Wconversion -Wsign-conversion -Wctor-dtor-privacy -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Woverloaded-virtual") - elseif(COMPILER_SUPPORTS_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -std=c++11 -Werror -Wall -Wextra -Wpedantic -Wno-missing-braces -Wconversion -Wsign-conversion -Wctor-dtor-privacy -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Woverloaded-virtual") - else() - message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") - endif() -endif() +add_library(gsl_tests_config INTERFACE) +target_compile_definitions(gsl_tests_config INTERFACE + GSL_THROW_ON_CONTRACT_VIOLATION + $<$:_SCL_SECURE_NO_WARNINGS> +) +target_compile_options(gsl_tests_config INTERFACE + $<$: + /EHsc + /W4 + > + $<$>: + -fno-strict-aliasing + -Wall + -Wcast-align + -Wconversion + -Wctor-dtor-privacy + -Werror + -Wextra + -Wno-missing-braces + -Wnon-virtual-dtor + -Wold-style-cast + -Woverloaded-virtual + -Wpedantic + -Wshadow + -Wsign-conversion + > +) function(add_gsl_test name) add_executable(${name} ${name}.cpp) @@ -39,6 +50,8 @@ function(add_gsl_test name) ${name} ${name} ) + set_property(TARGET ${name} PROPERTY FOLDER "gsl_tests") + target_link_libraries(${name} cppGSL gsl_tests_config unittest_cpp) endfunction() add_gsl_test(span_tests)