Archetype: cmake_component_tests.mustache
tests/CMakeLists.txt for every component profile: a Catch2 test executable from all *.cpp under tests/, the test_<name> custom target wired into run_all_tests, and the CTest registration with XML output. (The repeated boilerplate across the 65 per-component test files is the subject of the centralise-test-target capture.) Output projects/{component_full}/tests/CMakeLists.txt. CMake target declaration for this component. Wires sources, include paths, link dependencies, and the export macro.
See the Template variable reference for the complete list of available variables and their semantics.
Template
The full template source. Edit here and re-tangle with
compass build --direct tangle_codegen_templates to regenerate
library/templates/cmake_component_tests.mustache.
{{! GENERATED FILE — tangled from projects/ores.codegen/library/templates/cmake.org. Edit the org source. }}
{{{cmake_license}}}
{{#component}}
set(name "{{full_name}}")
set(lib_target_name ${name}.lib)
set(tests_binary_name ${name}.tests)
set(tests_target_name ${name}.tests)
set(files "")
file(GLOB_RECURSE files RELATIVE
"${CMAKE_CURRENT_SOURCE_DIR}/"
"${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
add_executable(${tests_target_name} ${files})
set_target_properties(${tests_target_name}
PROPERTIES OUTPUT_NAME ${tests_binary_name})
target_link_libraries(${tests_target_name}
PRIVATE
${lib_target_name}
ores.utility.lib
ores.testing.lib
ores.logging.lib
Catch2::Catch2
faker-cxx::faker-cxx
${CMAKE_THREAD_LIBS_INIT})
add_custom_target(test_${tests_target_name}
COMMENT "Testing ${tests_target_name}" VERBATIM
COMMAND $<TARGET_FILE:${tests_binary_name}>
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
DEPENDS ${tests_target_name})
add_dependencies(run_all_tests test_${tests_target_name})
add_test(NAME ${tests_target_name}
COMMAND ${tests_binary_name} ${ORES_CATCH2_ARGS} -r xml::out=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-results-${tests_target_name}.xml
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
set_tests_properties(${tests_target_name} PROPERTIES
PROCESSORS 1
ENVIRONMENT "${ORES_TEST_ENV}"
ATTACHED_FILES_ON_FAIL "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test-results-${tests_target_name}.xml"
)
set_property(TEST ${tests_target_name} PROPERTY USES_XML_OUTPUT ON)
{{/component}}
See also
- Parent facet: CMake templates
- Template variable reference