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

3
在GNU make手册的早期部分之一,即第3.7节中,提供了一个makefile配方的大纲。 (第3.7节链接)
immediate : immediate ; deferred
        deferred

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

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

什么是分号的作用?由于上述部分谈到了即时和延迟变量扩展,我猜想分号前面的部分会立即扩展,分号后面的部分只有在目标执行时才会扩展。有人能确认吗?
我在 Stack Overflow 上找到了类似的问题,但那些都是特殊情况,并且它们的被接受答案似乎没有得到重点。
2个回答

4

4.2规则语法所解释的那样:

In general, a rule looks like this:

targets : prerequisites
        recipe
        

or like this:

targets : prerequisites ; recipe
        recipe
        

配方行以制表符(或者.RECIPEPREFIX变量的值的第一个字符;请参阅特殊变量)开头。第一条配方行可能出现在先决条件下一行,并带有一个制表符;或者可能与先决条件在同一行上,带一个分号。两者的效果是相同的。

(强调是我的。)

你的示例等同于:

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

2
分号只是允许将食谱的第一行与先决条件列表写在同一行上。
这样做(假设您的食谱适合单行)可以编写没有任何恶意制表符的Makefile。否则,它没有太大用处。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接