在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了解更多信息

+1

是的,这是我原本想做的事,但不知道这是不是好习惯。一切都奏效了,谢谢 – JonMorehouse 2013-02-14 18:25:46

你可以通过在命令行中的变量:

test: 
    make -C test PACKAGES="$(PACKAGES)" 

请注意,这是不可能走另一条路,虽然各地。如果test/Makefile更改了一个变量,则这些更改无法返回到调用makefile。


如果你想添加到PACKAGES变量在主makefile文件,你将不得不重构您的构建系统包括子的makefile来代替。因此,主makefile设置了一切,然后包括(在大多数make实现中使用include指令)添加了特定目标本地到它们的子makefiles,以及修改/添加变量。

例如,假设您有两个测试目录,test_footest_bar,您可以有一个包含测试目标的变量,我们称它为TEST_TARGETStest_*文件夹中的每个生成文件都将其本地和唯一目标添加到全局变量,然后主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 
+0

我用最后的办法发现问题的文件是$(MAKE)$(目标)被称为在顶层Makefile目录中有路径。我认为路径需要放在包含感兴趣目标的Makefile文件夹中,以便它能正常工作。 – 2013-02-18 21:40:25