Update, modernize cmakelists (#14)
* remove IS_TOPLEVEL_PROJECT cmake variable from top level * rework example/CMakeLists.txt with generator expressions * rework test/CMakeLists.txt with generator expressions * fix unknown cxx_std_20 on certain cmake versions * update test_package/CMakeLists.txt with modern cmake
This commit is contained in:
parent
fea658233a
commit
0639b4b0c4
4 changed files with 48 additions and 78 deletions
|
@ -4,14 +4,8 @@ project(nameof VERSION "0.9.0" LANGUAGES CXX)
|
|||
|
||||
include(${CMAKE_BINARY_DIR}/conan_paths.cmake OPTIONAL)
|
||||
|
||||
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
||||
set(IS_TOPLEVEL_PROJECT TRUE)
|
||||
else()
|
||||
set(IS_TOPLEVEL_PROJECT FALSE)
|
||||
endif()
|
||||
|
||||
option(NAMEOF_OPT_BUILD_EXAMPLES "Build nameof examples" ${IS_TOPLEVEL_PROJECT})
|
||||
option(NAMEOF_OPT_BUILD_TESTS "Build and perform nameof tests" ${IS_TOPLEVEL_PROJECT})
|
||||
option(NAMEOF_OPT_BUILD_EXAMPLES "Build nameof examples" OFF)
|
||||
option(NAMEOF_OPT_BUILD_TESTS "Build and perform nameof tests" OFF)
|
||||
|
||||
if(NAMEOF_OPT_BUILD_EXAMPLES)
|
||||
add_subdirectory(example)
|
||||
|
|
|
@ -1,27 +1,13 @@
|
|||
include(CheckCXXCompilerFlag)
|
||||
# set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
|
||||
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||
check_cxx_compiler_flag(-std=c++17 HAS_CPP17_FLAG)
|
||||
if(!HAS_CPP17_FLAG)
|
||||
MESSAGE(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++17 support.")
|
||||
endif()
|
||||
add_executable(example example.cpp)
|
||||
target_link_libraries(example PRIVATE nameof::nameof)
|
||||
set_target_properties(example PROPERTIES CXX_EXTENSIONS OFF)
|
||||
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
set(OPTIONS -Wall -Wextra -pedantic-errors -Werror -std=c++17)
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
check_cxx_compiler_flag(/std:c++17 HAS_CPP17_FLAG)
|
||||
if(!HAS_CPP17_FLAG)
|
||||
MESSAGE(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++17 support.")
|
||||
endif()
|
||||
|
||||
set(OPTIONS /W4 /WX /std:c++17)
|
||||
if(HAS_PERMISSIVE_FLAG)
|
||||
set(OPTIONS ${OPTIONS} /permissive-)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_executable(example
|
||||
example.cpp
|
||||
${CMAKE_SOURCE_DIR}/include/${CMAKE_PROJECT_NAME}.hpp)
|
||||
target_compile_options(example PRIVATE ${OPTIONS})
|
||||
target_link_libraries(example PRIVATE ${CMAKE_PROJECT_NAME})
|
||||
target_compile_options(example
|
||||
PRIVATE
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:
|
||||
-Wall -Wextra -pedantic-errors -Werror>
|
||||
$<$<CXX_COMPILER_ID:MSVC>:
|
||||
/W4 /WX>
|
||||
)
|
||||
|
|
|
@ -1,46 +1,36 @@
|
|||
include(CheckCXXCompilerFlag)
|
||||
find_package(Catch2 REQUIRED)
|
||||
|
||||
find_package(Catch2 REQUIRED)
|
||||
include(CheckCXXCompilerFlag)
|
||||
check_cxx_compiler_flag(-std=c++20 HAS_GNU_CPP20_FLAG)
|
||||
check_cxx_compiler_flag(/std:c++20 HAS_MSVC_CPP20_FLAG)
|
||||
|
||||
set(SOURCES test.cpp)
|
||||
set(HAS_CPP20 (HAS_GNU_CPP20_FLAG OR HAS_MSVC_CPP20_FLAG))
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
set(OPTIONS /W4 /WX)
|
||||
check_cxx_compiler_flag(/permissive HAS_PERMISSIVE_FLAG)
|
||||
if(HAS_PERMISSIVE_FLAG)
|
||||
set(OPTIONS ${OPTIONS} /permissive-)
|
||||
endif()
|
||||
|
||||
check_cxx_compiler_flag(/std:c++17 HAS_CPP17_FLAG)
|
||||
check_cxx_compiler_flag(/std:c++20 HAS_CPP20_FLAG)
|
||||
check_cxx_compiler_flag(/std:c++latest HAS_CPPLATEST_FLAG)
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
set(OPTIONS -Wall -Wextra -pedantic-errors -Werror)
|
||||
|
||||
check_cxx_compiler_flag(-std=c++17 HAS_CPP17_FLAG)
|
||||
check_cxx_compiler_flag(-std=c++20 HAS_CPP20_FLAG)
|
||||
endif()
|
||||
|
||||
function(make_test target std)
|
||||
add_executable(${target} ${SOURCES})
|
||||
target_compile_options(${target} PRIVATE ${OPTIONS})
|
||||
target_link_libraries(${target} PRIVATE ${CMAKE_PROJECT_NAME})
|
||||
target_link_libraries(${target} PRIVATE Catch2::Catch2)
|
||||
if(std)
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
target_compile_options(${target} PRIVATE /std:${std})
|
||||
else()
|
||||
target_compile_options(${target} PRIVATE -std=${std})
|
||||
endif()
|
||||
endif()
|
||||
add_test(NAME ${target} COMMAND ${target})
|
||||
endfunction()
|
||||
|
||||
if(HAS_CPP17_FLAG)
|
||||
make_test(${CMAKE_PROJECT_NAME}-cpp17.t c++17)
|
||||
endif()
|
||||
|
||||
if(HAS_CPPLATEST_FLAG)
|
||||
make_test(${CMAKE_PROJECT_NAME}-cpplatest.t c++latest)
|
||||
|
||||
add_executable(test-17 test.cpp)
|
||||
target_link_libraries(test-17 PRIVATE Catch2::Catch2 nameof::nameof)
|
||||
set_target_properties(test-17 PROPERTIES CXX_EXTENSIONS OFF)
|
||||
target_compile_features(test-17 PRIVATE cxx_std_17)
|
||||
|
||||
target_compile_options(test-17
|
||||
PRIVATE
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:
|
||||
-Wall -Wextra -pedantic-errors -Werror>
|
||||
$<$<CXX_COMPILER_ID:MSVC>:
|
||||
/W4 /WX>
|
||||
)
|
||||
|
||||
if(HAS_CPP20 AND (cxx_std_20 IN_LIST CMAKE_CXX_COMPILE_FEATURES))
|
||||
add_executable(test-20 test.cpp)
|
||||
target_link_libraries(test-20 PRIVATE Catch2::Catch2 nameof::nameof)
|
||||
set_target_properties(test-20 PROPERTIES CXX_EXTENSIONS OFF)
|
||||
target_compile_features(test-20 PRIVATE cxx_std_20)
|
||||
|
||||
target_compile_options(test-20
|
||||
PRIVATE
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:
|
||||
-Wall -Wextra -pedantic-errors -Werror>
|
||||
$<$<CXX_COMPILER_ID:MSVC>:
|
||||
/W4 /WX>
|
||||
)
|
||||
endif()
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
cmake_minimum_required(VERSION 2.8.12)
|
||||
cmake_minimum_required(VERSION 3.8)
|
||||
project(test_package CXX)
|
||||
|
||||
set(CMAKE_VERBOSE_MAKEFILE TRUE)
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
|
||||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
conan_basic_setup()
|
||||
conan_basic_setup(TARGETS)
|
||||
|
||||
add_executable(test_package test_package.cpp)
|
||||
target_link_libraries(test_package ${CONAN_LIBS})
|
||||
set_target_properties(test_package PROPERTIES CXX_STANDARD 17)
|
||||
target_link_libraries(test_package PRIVATE CONAN_PKG::nameof)
|
||||
target_compile_features(test_package PRIVATE cxx_std_17)
|
||||
|
|
Loading…
Reference in a new issue