配置自动工具以使用相同的目标文件来构建两个程序

问题描述 投票:0回答: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.o中的每个事物创建catch2-applicationcontroller.ocommon_sources,依此类推。

当然,这会使构建时间加倍。我希望将catch2lpsdr都链接到相同的目标文件:生成起来会更快,并且还可以确保我正在测试与运行时完全相同的编译代码。

是否有解决此问题的方法?

automake catch2
1个回答
2
投票

我不知道是否有一种方法可以避免为每个程序构建不同的目标文件,但是通过building an intermediate static library,然后将其链接到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
© www.soinside.com 2019 - 2024. All rights reserved.