如何在 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,然后在您的测试和二进制文件中使用它。
我有一个非递归 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,然后在您的测试和二进制文件中使用它。