在makefiles之间共享变量
我有一个目录结构,我想在我的主文件夹中创建一个主makefile,然后在我的test和src文件夹中创建另一个makefile。在makefiles之间共享变量
在我的主要生成文件中,我有针对测试/所有调用单个文件夹makefiles的指令。我试图在我的主要生成文件中声明变量并让它们可以访问其他文件夹。
例如,在我的主要的Makefile
PACKAGES = jansson mysql ....
all:
do something here
test:
cd test
make test
然后在我的测试/ Makefile中我希望能够访问以前的套餐变量,并添加这个Makefile的个人依赖于它。
在测试/ Makefile文件
PACKAGES += googletest googlemock
test
do something here
谁能帮我解决这个问题呢?
感谢
您可以创建另一个文件,为instan CE Makefile.variable
其中那些共享变量的定义,包括使用
include $(PATHTOSHAREDMAKEFILE)/Makefile.variable
看那include manual了解更多信息
你可以通过在命令行中的变量:
test:
make -C test PACKAGES="$(PACKAGES)"
请注意,这是不可能走另一条路,虽然各地。如果test/Makefile
更改了一个变量,则这些更改无法返回到调用makefile。
如果你想添加到PACKAGES
变量在主makefile文件,你将不得不重构您的构建系统包括子的makefile来代替。因此,主makefile设置了一切,然后包括(在大多数make实现中使用include
指令)添加了特定目标本地到它们的子makefiles,以及修改/添加变量。
例如,假设您有两个测试目录,test_foo
和test_bar
,您可以有一个包含测试目标的变量,我们称它为TEST_TARGETS
。 test_*
文件夹中的每个生成文件都将其本地和唯一目标添加到全局变量,然后主makefile可以运行它们。
事情是这样的:
主要生成文件:
# Start empty
TEST_TARGETS =
include test_foo/Makefile
include test_bar/Makefile
test:
for target in "$(TEST_TARGETS)"; do \
$(MAKE) $(target); \
done
test_foo/Makefile文件:
TEST_TARGETS += test_foo
test_foo:
# Do some foo testing
test_bar/Makefile文件:
TEST_TARGETS += test_bar
test_bar:
# Do some bar testing
我用最后的办法发现问题的文件是$(MAKE)$(目标)被称为在顶层Makefile目录中有路径。我认为路径需要放在包含感兴趣目标的Makefile文件夹中,以便它能正常工作。 – 2013-02-18 21:40:25
是的,这是我原本想做的事,但不知道这是不是好习惯。一切都奏效了,谢谢 – JonMorehouse 2013-02-14 18:25:46