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
,并使第一个目标执行,而不是
all

make的默认值是使用Makefile中的第一个目标。将all目标移动到开始处,或者在Makefile中的某个位置使用以下行

.DEFAULT_GOAL := all

对我有用。您是否检查了收据中的缩进问题(空格而不是制表符)以获取
$(b)
?@Tsyvarev,我的错误。我运行的是“make”,它运行的是第一条规则,即$(a)。当我运行
make all
时,它工作正常。哦,您使用带有默认目标的
make
,但是默认目标是makefile中列出的第一个目标。尝试
makeall
或将
all
规则移到makefile中其他规则之上。好吧,这是我的错误。问题在于规则的顺序。真正的Makefile中的错误与示例中的相同:)@Tsyvarev,耶,现在明白了,谢谢!