首页 > 解决方案 > 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 上发现了类似的问题,但是那些存在特殊情况的问题,并且他们接受的答案似乎都没有得到理解。

标签: makefile

解决方案


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

推荐阅读