Skip to content

Commit 54ccd15

Browse files
committed
Update CMakeLists.txt
1 parent fcfb076 commit 54ccd15

File tree

3 files changed

+107
-39
lines changed

3 files changed

+107
-39
lines changed

CMakeLists.txt

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,51 @@ cmake_policy(VERSION 3.24)
33

44
project(Traits VERSION 0.0.1 LANGUAGES CXX)
55

6-
set(CMAKE_CXX_STANDARD 20)
7-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
8-
96
add_library(traits INTERFACE)
107
add_library(Traits::traits ALIAS traits)
118
target_compile_features(traits INTERFACE cxx_std_20)
129
target_include_directories(traits INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>")
1310

14-
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
15-
16-
option (TRAITS_BUILD_TESTS "whether or not tests should be built" ON)
11+
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
12+
return()
13+
endif()
1714

18-
if(TRAITS_BUILD_TESTS)
19-
enable_testing()
20-
add_subdirectory(tests)
21-
endif()
15+
# install(TARGETS ${PROJECT_NAME}
16+
# EXPORT ${PROJECT_NAME}-targets
17+
# INCLUDES DESTINATION include
18+
# )
19+
# install(EXPORT ${PROJECT_NAME}-targets
20+
# FILE ${PROJECT_NAME}-targets.cmake
21+
# NAMESPACE Traits::
22+
# DESTINATION lib/cmake/traits
23+
# )
24+
25+
# install(FILES cmake/traits-config.cmake DESTINATION lib/cmake/traits)
26+
# install(FILES include/traits.h DESTINATION include)
27+
28+
option(TRAITS_BUILD_EXAMPLES "whether or not examples should be built" ON)
29+
option(TRAITS_BUILD_TESTS "whether or not tests should be built" ON)
30+
31+
if(TRAITS_BUILD_EXAMPLES OR TRAITS_BUILD_TESTS)
32+
enable_testing()
33+
add_custom_target(check COMMENT "build and run tests and examples")
34+
endif()
2235

23-
set(package_files examples/ include/ tests/ CMakeLists.txt LICENSE README.md)
24-
add_custom_command(
25-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-src.zip
26-
COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-src.zip --format=zip -- ${package_files}
27-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
28-
DEPENDS ${package_files}
29-
)
30-
add_custom_target(${PROJECT_NAME}_package DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-src.zip)
36+
if(TRAITS_BUILD_EXAMPLES)
37+
add_subdirectory(examples)
38+
add_dependencies(check examples)
39+
endif()
3140

41+
if(TRAITS_BUILD_TESTS)
42+
add_subdirectory(tests)
43+
add_dependencies(check tests)
3244
endif()
45+
46+
set(package_files examples/ include/ tests/ CMakeLists.txt LICENSE README.md)
47+
add_custom_command(
48+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-src.zip
49+
COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-src.zip --format=zip -- ${package_files}
50+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
51+
DEPENDS ${package_files}
52+
)
53+
add_custom_target(${PROJECT_NAME}_package DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-src.zip)

examples/CMakeLists.txt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
cmake_minimum_required(VERSION 3.12)
2+
cmake_policy(VERSION 3.24)
23

34
project(TraitsExamples VERSION 0.0.1 LANGUAGES CXX)
45

5-
include(FetchContent)
6+
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
7+
include(FetchContent)
68

7-
FetchContent_Declare(traits GIT_REPOSITORY https://github.com/VolumeGraphics/traits.git GIT_TAG main)
8-
FetchContent_MakeAvailable(traits)
9+
FetchContent_Declare(traits GIT_REPOSITORY https://github.com/VolumeGraphics/traits.git GIT_TAG main)
10+
FetchContent_MakeAvailable(traits)
11+
endif()
912

1013
enable_testing()
1114

15+
add_custom_target(examples
16+
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
17+
COMMENT "build and run examples"
18+
USES_TERMINAL
19+
)
20+
1221
set (EXAMPLES quickstart readme)
22+
1323
foreach(EXAMPLE IN LISTS EXAMPLES)
1424
add_executable(${EXAMPLE} EXCLUDE_FROM_ALL "${EXAMPLE}.cpp")
1525
target_link_libraries(${EXAMPLE} PRIVATE Traits::traits)
1626

1727
add_test(NAME ${EXAMPLE} COMMAND ${EXAMPLE})
28+
add_dependencies(examples ${EXAMPLE})
1829
endforeach()

tests/CMakeLists.txt

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,64 @@ include(FetchContent)
22
include(GoogleTest)
33

44
FetchContent_Declare(
5-
googletest
6-
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip
7-
)
5+
googletest
6+
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip
7+
)
88

99
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
1010
FetchContent_MakeAvailable(googletest)
1111

12-
set (
13-
TESTS
14-
function_type
15-
)
12+
enable_testing()
13+
14+
add_custom_target(tests
15+
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
16+
COMMENT "build and run all unit tests"
17+
USES_TERMINAL
18+
)
19+
20+
set (TESTS
21+
function_type
22+
)
1623

1724
foreach(TEST IN LISTS TESTS)
18-
add_executable(
19-
${TEST}
20-
${TEST}.cpp
21-
)
22-
target_link_libraries(
23-
${TEST}
24-
PRIVATE Traits::traits
25-
PRIVATE GTest::gtest_main
26-
)
27-
28-
gtest_discover_tests(${TEST})
25+
add_executable(${TEST} ${TEST}.cpp)
26+
target_link_libraries(${TEST}
27+
PRIVATE Traits::traits
28+
PRIVATE GTest::gtest_main
29+
)
30+
31+
add_dependencies(tests ${TEST})
32+
33+
gtest_discover_tests(${TEST})
2934
endforeach()
35+
36+
# # Add the deployment test, which checks that we can indeed install dyno and
37+
# # then use `find_package` to depend on it from another CMake project.
38+
# include(ExternalProject)
39+
# set(DYNO_FAKE_INSTALL_DIR "${PROJECT_BINARY_DIR}/fakeroot")
40+
# ExternalProject_Add(test.deploy.fakeroot
41+
# SOURCE_DIR "${PROJECT_SOURCE_DIR}"
42+
# EXCLUDE_FROM_ALL TRUE
43+
# BUILD_ALWAYS TRUE
44+
# INSTALL_DIR "${DYNO_FAKE_INSTALL_DIR}"
45+
# CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
46+
# -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
47+
# -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
48+
# -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
49+
# TEST_COMMAND "" # Disable test step
50+
# UPDATE_COMMAND "" # Disable source work-tree update
51+
# )
52+
53+
# add_custom_target(test.deploy
54+
# DEPENDS test.deploy.fakeroot
55+
# COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
56+
# COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
57+
# COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/deploy"
58+
# ${CMAKE_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/deploy"
59+
# -DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
60+
# -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${DYNO_FAKE_INSTALL_DIR}"
61+
# -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
62+
# COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/deploy"
63+
# )
64+
# add_test(NAME test.deploy
65+
# COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target test.deploy)

0 commit comments

Comments
 (0)