我有一个使用自动工具进行构建的C ++项目,并使用Catch2进行了单元测试。 Catch2的详细信息可能不相关:这只是我必须构建并运行的另一个程序。
我有Makefile.am
这样设置(简化):
AUTOMAKE_OPTIONS = subdir-objects
check_PROGRAMS = catch2
bin_PROGRAMS = lpsdr
common_sources = applicationcontroller.cc flowgraph.cc [...]
lpsdr_SOURCES = $(common_sources) main.cc
catch2_SOURCES = $(common_sources) test.cc
此方法最有效,除了它将所有内容编译两次,为lpsdr-applicationcontroller.o
中的每个事物创建catch2-applicationcontroller.o
和common_sources
,依此类推。
当然,这会使构建时间加倍。我希望将catch2
和lpsdr
都链接到相同的目标文件:生成起来会更快,并且还可以确保我正在测试与运行时完全相同的编译代码。
是否有解决此问题的方法?
我不知道是否有一种方法可以避免为每个程序构建不同的目标文件,但是通过building an intermediate static library,然后将其链接到lpsdr
和catch2
,可以达到相同的效果。
类似这样的东西:
AUTOMAKE_OPTIONS = subdir-objects
noinst_LIBRARIES = liblpsdr.a
check_PROGRAMS = catch2
bin_PROGRAMS = lpsdr
liblpsdr_a_SOURCES = applicationcontroller.cc dispatcher_sink.cc [...]
lpsdr_SOURCES = main.cc
lpsdr_LDADD = liblpsdr.a
catch2_SOURCES = test.cc
catch2_LDADD = liblpsdr.a