[CMake] building tests

Michael Wild themiwi at gmail.com
Wed Jul 7 11:05:43 EDT 2010


On 7. Jul, 2010, at 16:01 , Paul Harris wrote:

> Hi all,
> 
> I have looked and can't find the answer, so I turn to the list.
> 
> I have a CMakeLists.txt and a subdirectory called utils, which also has its
> own CMakeLists.txt
> 
> In the parent CML.txt, I have something like:
> 
> ENABLE_TESTING()
> add_subdirectory(utils)
> 
> In my utils CML.txt, I have
> 
> ADD_EXECUTABLE(unit_1 units/unit_1.cpp)
> ADD_TEST( unit_1 ${EXECUTABLE_OUTPUT_PATH}/unit_1 )
> 

Simplify this to

ADD_TEST(unit_1 unit_1)

CMake will figure out by itself that unit_1 is a target and invoke the executable correctly (your code would break for multi-configuration IDE generators).

As for the dependencies, I agree that it would be nice if the "test" target depended on the executables. But what is wrong with "make all test" (apart from the fact that it possibly compiles more than you actually need to run the test)? You could also wrap the add_executable call in a custom function which creates a custom target (say test_exes) and makes it depend on all the executables:

function(add_test_executable name)
  if(NOT TARGET ${name})
    add_custom_target(test_exes)
   endif()
   add_executable(${name} ${ARGN})
   add_dependencies(test_exes ${name})
endfunction()

Then you can do "make test_exes test".

HTH

Michael


More information about the CMake mailing list