1

我有一个使用自动工具构建的 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.ocatch2-applicationcontroller.ocommon_sources.

当然,这会使构建时间加倍。我更喜欢将两者链接catch2lpsdr使用相同的目标文件:构建速度会更快,并确保我正在测试与正在运行的完全相同的编译代码。

有没有办法解决这种行为?

4

1 回答 1

3

我不知道是否有办法避免为每个程序构建不同的目标文件,但是通过构建中间静态库,然后链接lpsdrcatch2反对,可以产生相同的效果。

像这样的东西:

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
于 2020-04-12T21:20:03.630 回答