CMakeEmulateMakeCheck: Difference between revisions
m (Fixed type) |
|||
Line 8: | Line 8: | ||
First you need to define a custom target <tt>check</tt>. You only need to do this once, so doing this in your toplevel <tt>CMakeLists.txt</tt> file is probably a good idea. | First you need to define a custom target <tt>check</tt>. You only need to do this once, so doing this in your toplevel <tt>CMakeLists.txt</tt> file is probably a good idea. | ||
set(CMAKE_TEST_COMMAND "ctest") | |||
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | ||
Note that the example CMAKE_TEST_COMMAND (above) is only suited to some systems (eg linux), and you have the opportunity to use a different program and add command line arguments in the set() call. | |||
==== Add a test program ==== | ==== Add a test program ==== |
Revision as of 03:05, 8 July 2010
How to emulate GNU Autotools 'make check'
Those of you familiar with the GNU Autotools probably know that the all target in a Makefile generated by autoconf/automake does not cause a (re)build of your test programs (assuming you've listed them as check_PROGRAMS). This is IMHO a very nice feature, because the normal build is not bogged down by the compilation of many test programs, or worse, comes to a grinding halt due to a compilation error in one of the test programs you didn't have time to fix yet. When the time has come to run your test suite, you simply type make check and your test programs will be (re)build and run.
This feature can be emulated in CMake.
Define a custom target
First you need to define a custom target check. You only need to do this once, so doing this in your toplevel CMakeLists.txt file is probably a good idea.
set(CMAKE_TEST_COMMAND "ctest") add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
Note that the example CMAKE_TEST_COMMAND (above) is only suited to some systems (eg linux), and you have the opportunity to use a different program and add command line arguments in the set() call.
Add a test program
To add a test program <testprog>, use the following commands
add_executable(<testprog> EXCLUDE_FROM_ALL ...) add_test(<testprog> <testprog>) add_dependencies(check <testprog>)
The option EXCLUDE_FROM_ALL is essential here; it causes <testprog> to be ignored when the all target is built.
Note
If you organize all your test programs in one directory, you can use the EXCLUDE_FROM_ALL option with the add_subdirectory command. That way, you don't need to specify this option with every add_executable command.