CMakeEmulateMakeCheck: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
(Replace content with link to new CMake community wiki)
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== How to emulate GNU Autotools 'make check' ==
{{CMake/Template/Moved}}


Those of you familiar with the GNU Autotools probably know that the <tt>all</tt> target in a Makefile generated by autoconf/automake does not cause a (re)build of your test programs (assuming you've listed them as <tt>check_PROGRAMS</tt>). 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 <tt>make check</tt> and your test programs will be (re)build and run.
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/EmulateMakeCheck here].
 
This feature can be emulated in CMake.
 
==== Define a custom target ====
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})
 
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 <tt><testprog></tt>, use the following commands
 
add_executable(<testprog> EXCLUDE_FROM_ALL ...)
add_test(<testprog> <testprog>)
add_dependencies(check <testprog>)
 
The option <tt>EXCLUDE_FROM_ALL</tt> is essential here; it causes <tt><testprog></tt> to be ignored when the <tt>all</tt> target is built.
 
===== Note =====
If you organize all your test programs in one directory, you can use the <tt>EXCLUDE_FROM_ALL</tt> option with the <tt>add_subdirectory</tt> command. That way, you don't need to specify this option with every <tt>add_executable</tt> command.

Latest revision as of 15:41, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.