I wrote about meson the awesome build system before. For C-based projects
with many test executables there is nice infrastructure, however many C++
projects probably use Google Test or Catch and a single binary which
runs the entire test suite. This is all nice and dandy with Google Test if you
compile and link the test executable straight from the unit test source files.
If however you build intermediate static libraries for organizational reasons
you will quickly notice that Google Test won’t run anything at all because the
symbols from Google Test itself won’t end up in the final
binary without specifying the
--whole-archive flag. Luckily, meson got the
link_whole parameter since
version 0.46, so instead of declaring your static test library as
test_lib = static_library('testlib', sources: test_sources, dependencies: [gtest_dep] + build_deps, ) test_dep = declare_dependency( link_with: test_lib, dependencies: other_deps, ) test_binary = executable('testfoo', sources: ['main.cpp'], dependencies: [test_dep], )
you would change
test_dep = declare_dependency( link_whole: test_lib, dependencies: other_deps, )
and run your tests as usual.