Makefile GNU make:未执行嵌套变量中的规则特权
关键是我希望将一些依赖项集中在一个变量中,但是依赖项本身包含在变量中Makefile GNU make:未执行嵌套变量中的规则特权,makefile,gnu-make,Makefile,Gnu Make,关键是我希望将一些依赖项集中在一个变量中,但是依赖项本身包含在变量中 a=meow b=squeek $(a): touch $@ $(b): touch $@ targs=$(a) $(b) all: $(targs) 在实际情况中,a和b的规则不同,因此我需要将它们放在单独的目标中 当我尝试构建这样一个目标时,只执行最后一个嵌套依赖项: $ make touch meow $ l
a=meow
b=squeek
$(a):
touch $@
$(b):
touch $@
targs=$(a) $(b)
all: $(targs)
在实际情况中,a和b的规则不同,因此我需要将它们放在单独的目标中
当我尝试构建这样一个目标时,只执行最后一个嵌套依赖项:
$ make
touch meow
$ ls
. .. Makefile meow
谁能解释一下我该如何解决这个问题,或者我错在哪里?
我可以做一个像targs:$(a)$(b)这样的假目标,但如果有办法保持我提到的结构,我想知道
提前谢谢
UPD:解决了。我的错误:我没有运行
make all
,而是运行了make
,并使第一个目标执行,而不是allmake的默认值是使用Makefile中的第一个目标。将all目标移动到开始处,或者在Makefile中的某个位置使用以下行
.DEFAULT_GOAL := all
对我有用。您是否检查了收据中的缩进问题(空格而不是制表符)以获取$(b)
?@Tsyvarev,我的错误。我运行的是“make”,它运行的是第一条规则,即$(a)。当我运行make all
时,它工作正常。哦,您使用带有默认目标的make
,但是默认目标是makefile中列出的第一个目标。尝试makeall
或将all
规则移到makefile中其他规则之上。好吧,这是我的错误。问题在于规则的顺序。真正的Makefile中的错误与示例中的相同:)@Tsyvarev,耶,现在明白了,谢谢!