我在makefile中找到以下命令:
$(var):
mkdir -p $(@D)
此命令是什么意思?
答案 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”功能的描述。