If ( __CMAKE_TESTS_INCLUDED ) Return ( ) EndIf ( ) Set ( __CMAKE_TESTS_INCLUDED TRUE ) CMake_Minimum_Required ( VERSION 3.0 ) Include ( CMakeParseArguments ) Include ( CTest ) Function ( ADD_CMAKE_TEST ) Set ( OPTIONS COMMAND ) Set ( ONE_VALUE_ARGS NAME TARGET ) 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 ${ADD_CMAKE_TEST_COMMAND} ) Add_Dependencies ( tests run_${ADD_CMAKE_TEST_TARGET} ) # CTest ####################################################################################### Add_Test ( NAME ${ADD_CMAKE_TEST_NAME} COMMAND ${ADD_CMAKE_TEST_COMMAND} ) EndFunction ( )