[CMake] Building all tests in parallel (whole subtrees)
Matthew Woehlke
matthew.woehlke at kitware.com
Wed Jan 23 19:07:57 EST 2013
On 2013-01-23 18:08, Wojciech Knapik wrote:
> I set up targets that build the unit test executables and
> marked them with EXCLUDE_FROM_ALL, because I don't want to tie building
> them to building the application code. Now I need a way to build and run
> these tests en masse, since there are too many to do it one at a time.
>
> Ideally I'd like to have a make target, that I could call to build all
> unit tests in the current directory and below *in*parallel*.
I'm not sure if this is possible (or at least feasible)... different
generators may or may not have the concept of targets in directories. I
think you would need to create a uniquely named target per directory.
Now, assuming you are okay creating one top-level target to build
everything, it's easy:
root/CMakeLists.txt:
add_custom_target(all_tests)
root/some_subdir/test/CMakeLists.txt:
add_dependency(all_tests my_test_executable)
The tests will have the same ability to be built in parallel as any
other targets.
If you are using Makefiles, this *might* 'just happen' to do what you
want for directory-level granularity, but it won't work with other
generators (e.g. ninja, MSVS, etc.). Otherwise, you can probably figure
out how to extend the above idea to directory-level targets.
(On an unrelated note, I would suggest looking at ninja; it's a whole
bunch faster than make, nmake, or MSVS.)
--
Matthew
More information about the CMake
mailing list