makefile先决条件列表中的分号是什么?

makefile先决条件列表中的分号是什么?,makefile,Makefile,在GNU make手册的早期部分中,有一个makefile配方的概要 immediate : immediate ; deferred deferred 在先决条件列表中包含分号。因此,一个有效的配方可能是 output.o : output.c header1.h header2.h; header3.h gcc output.c -o output.o 分号的意义是什么?由于前面提到的部分讨论了立即变量扩展和延迟变量扩展,我猜分号之前的部分会立即扩展,而分

在GNU make手册的早期部分中,有一个makefile配方的概要

immediate : immediate ; deferred
        deferred
在先决条件列表中包含分号。因此,一个有效的配方可能是

output.o : output.c header1.h header2.h; header3.h
        gcc output.c -o output.o
分号的意义是什么?由于前面提到的部分讨论了立即变量扩展和延迟变量扩展,我猜分号之前的部分会立即扩展,而分号部分只会在目标执行后扩展。有人能证实吗


我在这方面也发现了类似的问题,但那个些提出特殊情况的人和他们接受的答案似乎都并没有抓住要点。

分号只允许将菜谱的第一行写在先决条件列表的同一行上

这样(假设你的食谱只适合一行),你就可以编写一个没有任何邪恶标签的Makefile。否则它没有多大用处。

如中所述:

一般来说,规则如下所示:

targets : prerequisites
        recipe
        …
targets : prerequisites ; recipe
        recipe
        …
或者像这样:

targets : prerequisites
        recipe
        …
targets : prerequisites ; recipe
        recipe
        …
[……]

配方行以制表符开头(或
.RECIPEPREFIX
变量值中的第一个字符;请参阅)第一个配方行可能出现在先决条件后的行上,带有制表符,或者可能出现在同一行上,带有分号。无论哪种方式,效果都是一样的

(我的重点。)

你的例子相当于

output.o : output.c header1.h header2.h
        header3.h
        gcc output.c -o output.o