Jon*_*use 12 c++ makefile compilation
我有一个目录结构,我想在我的主文件夹中有一个主makefile,然后在我的test和src文件夹中有另一个makefile.
在我的主makefile中,我有针对test/all调用单个文件夹makefile的指令.我正在尝试在我的主makefile中声明变量,并让它们可以访问其他文件夹.
例如在我的主Makefile中
PACKAGES = jansson mysql ....
all:
do something here
test:
cd test
make test
Run Code Online (Sandbox Code Playgroud)
然后在我的test/Makefile中,我希望能够访问先前的PACKAGES变量并将此makefile的各个依赖项添加到其中.
在test/Makefile中
PACKAGES += googletest googlemock
test
do something here
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题?
谢谢
UmN*_*obe 11
您可以创建另一个文件,例如Makefile.variable
,定义这些共享变量并使用包含该文件的位置
include $(PATHTOSHAREDMAKEFILE)/Makefile.variable
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅包含手册
您可以在命令行上传递变量:
test:
make -C test PACKAGES="$(PACKAGES)"
Run Code Online (Sandbox Code Playgroud)
请注意,尽管如此,它是不可能的.如果test/Makefile
更改了变量,那么这些更改就无法返回到调用makefile.
如果要添加到PACKAGES
主makefile中的变量,则必须重构构建系统以包含子makefile.因此主makefile设置了所有内容,然后包括(使用include
大多数make实现中可用的指令)子makefile文件,它们为它们添加本地特定目标,以及更改/添加变量.
例如,假设您有两个测试目录,test_foo
并且test_bar
您可以拥有一个包含测试目标的变量,我们可以调用它TEST_TARGETS
.文件test_*
夹中的每个makefile都将其本地和唯一目标添加到全局变量,然后主makefile可以运行它们.
像这样的东西:
主要makefile:
# Start empty
TEST_TARGETS =
include test_foo/Makefile
include test_bar/Makefile
test:
for target in "$(TEST_TARGETS)"; do \
$(MAKE) $(target); \
done
Run Code Online (Sandbox Code Playgroud)
test_foo/Makefile文件:
TEST_TARGETS += test_foo
test_foo:
# Do some foo testing
Run Code Online (Sandbox Code Playgroud)
test_bar/Makefile文件:
TEST_TARGETS += test_bar
test_bar:
# Do some bar testing
Run Code Online (Sandbox Code Playgroud)