2015-11-30 113 views
0

问题是我想在一个变量中集中一些依赖项,但依赖项本身包含在变量中。GNU make:嵌套变量中的规则前提未执行

a=meow 
    b=squeek 

    $(a): 
     touch [email protected] 
    $(b): 
     touch [email protected] 

    targs=$(a) $(b) 

    all: $(targs) 

在真实的情况下,a和b的规则不同,所以我需要它们在不同的目标中。

当我试图建立这样一个目标,只有最后一个嵌套的依赖被执行:

$ make 
    touch meow 

    $ ls 
    . .. Makefile meow 

谁能请解释我如何解决的情况或者我错了? 我可以制作一个像targs这样的假目标:$(a)$(b),但是如果有一种方法可以保留我提到的结构,我想知道它。

提前致谢!

UPD:解决。我的错误:而不是运行make all我跑make并执行第一个目标而不是all

+0

为我工作的地方使用下面的行。是否在收到$(b)'时检查了缩进问题(空格而不是制表符)? – Tsyvarev

+0

@Tsyvarev,我的错。我正在运行'make',它运行了第一条规则,即$(a)。 当我运行'make all'时,它工作正常。 –

+0

哦,你使用'make'与* default * target,但默认目标是makefile中列出的第一个目标。尝试'make all'或将all规则移到makefile中的其他位置。 – Tsyvarev

回答

0

Make的默认设置是使用Makefile中的第一个目标。无论是移动所有目标的开头或在Makefile

.DEFAULT_GOAL := all