$(VAR)的含义:在makefile中

时间:2019-04-20 20:37:35

标签: linux makefile

我在makefile中找到以下命令:

$(var):  
          mkdir -p $(@D)

此命令是什么意思?

2 个答案:

答案 0 :(得分:1)

$(VAR)扩展为变量VAR的值。这是一个Make变量(不是shell等变量)。例如,如果您在Makefile的前面定义了

VAR=ick/poo

然后,VAR扩展为ick/poo,并且您食谱中的@D扩展为目录部分ick

您似乎对shell和make之间的关系感到困惑,我也许应该指出这是两种不同的语言,尽管在Makefile中,您会遇到两种;配方(由制表符缩进的部分)将传递到外壳进行评估(尽管通常外壳将为/bin/sh,而不是Bash,除非您专门重写Make变量SHELL强制它)。

顺便说一下,在外壳中,表面相似的构造$(cmd)执行命令替换;也就是说,将评估命令cmd并将其输出作为文本插入。例如,

echo Running in $(pwd)

将打印

Running in /home/you

如果在目录/home/you中执行(命令pwd打印出您当前的工作目录)。 ...尽管在Makefile中,美元符号通常由make自己评估和消耗;因此要在外壳上传递文字美元符号,您必须将其加倍。

test:
    echo Running in $$(pwd)

答案 1 :(得分:1)

如@tripleee $(var)所述,扩展为变量。因为它在冒号前面列出,这意味着它是Makefile中的目标。

有关$(@D)的信息,请参见制作手册中的10.5.3 Automatic Variables

  

目标文件名的目录部分,除去斜杠。如果“ $ @”的值为dir / foo.o,则“ $(@ D)”为dir。该值为。如果“ $ @”不包含斜杠。

注意:这不是shell脚本。这是一个makefile。请使用“ man make”作为“ make”功能的描述。