我在目录foo
中有一个makefile,并且希望在子目录bar
中使用相同的makefile。我一直在做以下几点:在一个单独的目录中使用相同的make文件
all:
<do work in foo>
cd bar;
make -f ../Makefile <target to make in bar>
当我尝试做目标特定变量的值,因为我需要在bar
调用make
当通过他们在命令行上这变得非常混乱。有没有更干净的方法来做到这一点?
我在目录foo
中有一个makefile,并且希望在子目录bar
中使用相同的makefile。我一直在做以下几点:在一个单独的目录中使用相同的make文件
all:
<do work in foo>
cd bar;
make -f ../Makefile <target to make in bar>
当我尝试做目标特定变量的值,因为我需要在bar
调用make
当通过他们在命令行上这变得非常混乱。有没有更干净的方法来做到这一点?
在bar
到../Makefile
之间创建一个链接(硬或符号,您的选择)。然后,正如卡尔在他的评论中指出的,你可以make -C bar
,一切都应该工作。 (从gmake 3.81开始,至少,先切换到新目录,然后做它的事情,我不能说gmake 4.0。)
我无法从问题中判断下列解决方案是否满足您的需求,它可能 - 或者可能不 - 为你工作。
如果你的情况是,你只是想要相同的Makefile
功能可用,include
可能是一个解决方案。您可以在目录中,你做你需要具体到bar
一切bar
创建Makefile
,除此之外,你这样做:
include ../foo/Makefile
买者!这不直接工作。不能有两个同名的食谱。例如,如果你想foo/Makefile
为all
做recipeBar
,并且要foo/Makefile
做recipeFoo
和recipeBar
为all
,以下不起作用:
富/ Makefile文件:
.PHONY: all
all:
recipeFoo
酒吧/ Makefile:
.PHONY: all
all:
reciveBar
include foo/Makefile
取而代之的是,配方必须分成独特的n埃姆斯。但是,依赖关系规则可能存在多次,所以解决此警告并不是真正的挑战。所以,下面的工作:
富/ Makefile文件:
.PHONY: all
all: allFoo
.PHONY: allFoo
allFoo:
recipeFoo
酒吧/ Makefile文件:
.PHONY: all
all: allBar
.PHONY: allBar
allBar:
recipeBar
include foo/Makefile
现在,如果你在运行bar
make
,它会运行recipeFoo
和recipeBar
。 如果序列对自己和recipeFoo
必须recipeBar
之前运行,使allBar
依赖allFoo
,像这样的:如果你希望你的特定目标变量打电话时,请
.PHONY: all
all: allBar
.PHONY: allBar
allBar: allFoo
recipeBar
include foo/Makefile
:
酒吧/ Makefile文件另一个make
(为此我推荐使用$(MAKE)
而不是make
),您可以导出变量 - 相应的后果(某些Windows版本的环境空间溢出风险,
例如,如果你有一个具体的目标变量FOO
在Makefile
目标all
,并希望在调用Submake.mak
当变量是已知的,它的工作原理是这样的:
的Makefile:
all: export FOO:=bar
.PHONY: all
all:
$(MAKE) -f Submake.mak
Submake.mak:
.PHONY: all
all:
echo $(FOO)
'''让-C bar'''相当于(在结果)作为'''CD杆&& make''' – Carl 2014-09-25 23:02:02
这条规则(不能实际工作书面,但没关系)在'foo'中调用make,并在'bar'中重新调用它自己。你想在'foo'或者'bar'中调用Make吗? – Beta 2014-09-26 02:31:34
如果问题是通过子变量传递变量,那么可能使用'$(MAKE)'在这里有用处?这就是说,我实际上并没有明白这里需要什么,或者目前的makefile实际上在做什么(尽管看起来好像很糟糕)。 – 2014-10-02 19:21:01