# Module to compiler and add tests to CTest If ( __CMAKE_TESTS_INCLUDED ) Return ( ) EndIf ( ) Set ( __CMAKE_TESTS_INCLUDED TRUE ) CMake_Minimum_Required ( VERSION 3.0 ) Include ( CMakeParseArguments ) Include ( CTest ) # Function to add a single test # NAME - Name of the test # TARGET - Target to execute # COMMAND - Command to execute Function ( ADD_CMAKE_TEST ) Set ( OPTIONS COMMAND ) Set ( ONE_VALUE_ARGS NAME TARGET GROUP ) Set ( MULTI_VALUE_ARGS ) CMake_Parse_Arguments ( ADD_CMAKE_TEST "${OPTIONS}" "${ONE_VALUE_ARGS}" "${MULTI_VALUE_ARGS}" ${ARGN} ) If ( NOT ADD_CMAKE_TEST_NAME ) Message ( FATAL_ERROR "ADD_CMAKE_TEST expects the NAME parameter!" ) EndIf ( ) If ( NOT ADD_CMAKE_TEST_TARGET ) Message ( FATAL_ERROR "ADD_CMAKE_TEST expects the TARGET parameter!" ) EndIf ( ) If ( NOT ADD_CMAKE_TEST_COMMAND ) Set ( ADD_CMAKE_TEST_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${ADD_CMAKE_TEST_TARGET} ) Else ( ) Set ( ADD_CMAKE_TEST_COMMAND ${ADD_CMAKE_TEST_UNPARSED_ARGUMENTS} ) EndIf ( ) # Build Tests ################################################################################# If ( NOT TARGET build-tests ) Add_Custom_Target ( build-tests ) Add_Test ( NAME "build" COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target build-tests ) EndIf ( ) Add_Dependencies ( build-tests ${ADD_CMAKE_TEST_TARGET} ) # Run Tests ################################################################################### If ( NOT TARGET tests) Add_Custom_Target ( tests ) EndIf ( ) Add_Custom_Target ( run-${ADD_CMAKE_TEST_TARGET} DEPENDS ${ADD_CMAKE_TEST_TARGET} COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${ADD_CMAKE_TEST_COMMAND} ) Add_Dependencies ( tests run-${ADD_CMAKE_TEST_TARGET} ) If ( ADD_CMAKE_TEST_GROUP ) If ( NOT TARGET ${ADD_CMAKE_TEST_GROUP}-tests ) Add_Custom_Target ( ${ADD_CMAKE_TEST_GROUP}-tests ) EndIf ( ) Add_Dependencies ( ${ADD_CMAKE_TEST_GROUP}-tests run-${ADD_CMAKE_TEST_TARGET} ) EndIf ( ) # CTest ####################################################################################### Add_Test ( NAME ${ADD_CMAKE_TEST_NAME} COMMAND ${ADD_CMAKE_TEST_COMMAND} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) EndFunction ( )