meson and Google Test
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
to
test_dep = declare_dependency(
link_whole: test_lib,
dependencies: other_deps,
)
and run your tests as usual.