makefiile中的无限循环

use*_*069 1 c makefile

我在makefile中读到了关于递归变量的内容.因为我们在下面的代码中加上'=',它是一个递归变量,与':='相对应

CC = gcc -Wall
# we want to add something to the end of the variable
CC = $(CC) -g
hello.o: hello.c hello_api .h
$(CC) -c hello.c -o hello.o
Run Code Online (Sandbox Code Playgroud)

我还是不明白,为什么在这种情况下我们有一个非常大的循环.

Ker*_* SB 6

手册:

变量的第一个味道是递归扩展变量.[...]您指定的值是逐字安装的; 如果它包含对其他变量的引用,则只要替换此变量(在扩展其他字符串的过程中),就会扩展这些引用.发生这种情况时,称为递归扩展.

你的CC变量就是这种味道.它的内容是字面上的$(CC) -g; 事实并非如此 gcc -Wall -g.因此,当您展开此变量时,首先展开$(CC),它再次包含对自身的引用,因此您具有无限递归.

使用时的不同之:=处在于立即评估右侧并将结果分配给变量.