读取时会扩展makefile的所有部分中的变量和函数

时间:2014-01-05 03:28:52

标签: c makefile

GNU make教程中说:

  

makefile的所有部分中的变量和函数在扩展时都会扩展   阅读,除了食谱,变量的右侧   使用'='的定义,以及使用的变量定义的主体   define指令。

我写了以下内容:

CC:=gcc
$(CC)G=-o
TARGET=fmake
fmake: $(TARGET).c
    $(CC) $(gccG) $(TARGET) $(TARGET).c 

并且它正确编译了我的.c源文件,尽管我在变量定义的右侧使用'='和配方中的varibale。

1 个答案:

答案 0 :(得分:1)

如果你交换前两行的顺序,也许更容易解释会发生什么:

$(CC)G=-o
CC:=gcc

在第一行中,变量$(CC)出现在 left 侧,因此当它被读取时它会立即展开; ;但是你还没有定义变量,所以它扩展为空白,最终结果就像你输入了G=-o一样。然后,当需要扩展$(gccG)时,没有该名称的变量,因此也变成空白;所以执行的实际命令是gcc fmake fmake.c(注意没有标志)。

这种延迟扩张的意思是这样的事情:

VAR=$(VAR2)

在读取时不会扩展$(VAR2);存储的内容是$(VAR2)。 VAR2可以稍后更改,然后当VAR扩展时,它会扩展为$(VAR2),它本身会扩展为新值。