ham*_*amr 2 symbols gnu makefile
我想知道是否有人知道我的 makefile 中的独立 @ 符号和 'dir' 命令在这里的作用(第二行和第三行):
$(BUILD)/%.o: %.cpp
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $? -o $@
Run Code Online (Sandbox Code Playgroud)
我明白 $@ 是什么,但是 @ 本身并没有在 GNU 手册(https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html)中列出,并且我所有的搜索都讨论了 $ @。
此外,在第三行中,我知道 mkdir -p 创建嵌套目录,但我希望有人可以详细说明 $(dir $@) 特别是“dir”部分。
感谢您的时间。
如果@
启动配方行,则不会回显命令本身。
$(dir $@)
扩展到目标的目录部分$@
。在这种情况下,$(BUILD)/rest/path/to/
如果目标是$(BUILD)/rest/path/to/target.o
。
5.2 配方回显
通常,“make”会在执行之前打印配方的每一行。我们称其为“回显”,因为它给人的感觉就像是您自己键入的行。
当一行以“@”开头时,该行的回显将被抑制。在该行传递到 shell 之前,“@”将被丢弃。通常,您会将其用于唯一效果是打印某些内容的命令,例如用于指示 makefile 进度的“echo”命令:
Run Code Online (Sandbox Code Playgroud)@echo About to make distribution files
以及相同的 8.3 文件名函数
8.3 文件名函数
几个内置扩展函数专门与分解文件名或文件名列表相关。
以下每个函数对文件名执行特定的转换。该函数的参数被视为一系列由空格分隔的文件名。(忽略前导和尾随空格。)系列中的每个文件名都以相同的方式进行转换,并且结果之间用单个空格连接。
'$(dir NAMES...)' 提取 NAMES 中每个文件名的目录部分。文件名的目录部分是直到(并包括)最后一个斜杠的所有内容。如果文件名不包含斜杠,则目录部分是字符串“./”。例如,
Run Code Online (Sandbox Code Playgroud)$(dir src/foo.c hacks)
产生结果“src/./”。
归档时间: |
|
查看次数: |
1209 次 |
最近记录: |