如何在 Automake 程序和测试目标之间重用对象?

How to reuse objects between Automake program and tests targets?

我有一个非递归 Makefile.am,其中包含如下内容:

SHARED_SRCS = src/bar.cpp src/baz.cpp

bin_PROGRAMS = foo

foo_SOURCES = src/main.cpp $(SHARED_SRCS)
foo_CXXFLAGS = -I$(srcdir)/src $(SOME_CFLAGS)
foo_LDADD = $(SOME_LIBS)

check_PROGRAMS = test1 test2 test3
TESTS = test1 test2 test3

test1_SOURCES = tests/test1.cpp $(SHARED_SRCS)
test2_SOURCES = tests/test2.cpp $(SHARED_SRCS)
test3_SOURCES = tests/test3.cpp $(SHARED_SRCS)
test1_CXXFLAGS = $(foo_CXXFLAGS)
test2_CXXFLAGS = $(foo_CXXFLAGS)
test3_CXXFLAGS = $(foo_CXXFLAGS)
test1_LDADD = $(foo_LDADD)
test2_LDADD = $(foo_LDADD)
test3_LDADD = $(foo_LDADD)

但是,每个目标都构建自己的 SHARED_SRCS,构建它们 4 次,即使共享相同的标志。

有没有办法在不创建便利库的情况下构建它们,例如libbar.a 或 libtool 的 libbar.la?

不,没有。关键是您不是在重建源代码,而是在重建二进制文件。

您可以做的是构建一个仅包含共享源的中间 .o,然后在您的测试和二进制文件中使用它。