在 Makefile 中以等号结尾的“define”有或没有等号的区别?

gab*_*lin 3 syntax makefile

在makefile中,写法有什么区别

define VAR =
    ...
    ...
endef
Run Code Online (Sandbox Code Playgroud)

和写作

define VAR
    ...
    ...
endef
Run Code Online (Sandbox Code Playgroud)

请注意,后者缺少=在线define。两者都被 Gnumake 接受,但它们似乎没有表现出相同的行为(对我来说,我发现使用后者可以达到我想要的效果)。

什么时候应该使用哪种形式?

Mad*_*ist 5

它们之间没有区别:都创建递归多行变量值。

不过,有一个区别:前一个版本(带有等号)是在 GNU make 3.82(2010 年发布)中引入的。如果您仍在使用之前的 GNU make 版本,则此语句:

define FOO =
bar
enddef
Run Code Online (Sandbox Code Playgroud)

创建一个名为FOO =, not的变量FOO(这可能就是它似乎不适合您的原因)。

在这里添加赋值运算符的功能确实可以让您可以使用其他运算符,例如:=, ?=+=与多行变量,这是您以前无法做到的。

但如果没有指定运算符,则默认情况下总是创建一个普通的递归变量。