makefile - makefile 先决条件列表中的分号是什么?
问题描述
在 GNU make 手册的早期部分之一,第 3.7 节,有一个 makefile 配方的大纲
immediate : immediate ; deferred
deferred
在先决条件列表中包含分号。所以一个有效的食谱可能是
output.o : output.c header1.h header2.h; header3.h
gcc output.c -o output.o
分号的意义何在?由于上述部分讨论了立即和延迟变量扩展,我猜测分号之前的部分会立即扩展,而分号部分仅在目标执行后才会扩展。有人可以确认吗?
我在 SO 上发现了类似的问题,但是那些存在特殊情况的问题,并且他们接受的答案似乎都没有得到理解。
解决方案
如4.2 规则语法中所述:
一般来说,规则如下所示:
targets : prerequisites recipe …
或像这样:
targets : prerequisites ; recipe recipe …
[...]
配方行以制表符开头(或
.RECIPEPREFIX
变量值中的第一个字符;请参阅特殊变量)。第一个配方行可能出现在先决条件之后的行上,带有一个制表符,也可能出现在同一行上,带有一个分号。无论哪种方式,效果都是一样的。
(强调我的。)
你的例子相当于
output.o : output.c header1.h header2.h
header3.h
gcc output.c -o output.o
推荐阅读
- gdal - WMS的GDAL离线加载
- http-post - 如何声明授权 HTTP POST msteam?
- html - 如何将 JSON 数据填充到 Bootstrap 4 二级下拉菜单中
- html - 防止下拉菜单将 div 推到下面
- python - Tkinter:如何通过另一个帧中的按钮更新帧值?
- docker - 如何在本地的 docker 容器内使用 TLS(加密)挂载 EFS?
- bash - Shell 脚本排序
- javascript - 在多个元素上使用光滑滑块时出错
- python - 什么是从 Python 中仅部分字符串中删除重复项的简单方法?
- c# - PostgreSQL 中的 date_trunc 间隔 15 分钟