重写makefile变量

重写makefile变量,makefile,gnu-make,Makefile,Gnu Make,我有一个主makefile,它有变量的默认值,然后是一个包含项目特定设置的子makefile。在子makefile的末尾,我包含了主makefile 我一直在主makefile中使用以下代码来设置变量的默认值 ifndef CC CC = avr-gcc endif 最近我读到我也能做到 CC ?= avr-gcc 因此,我的问题是,两者是否相同,如果是的话,建议哪一种方法覆盖变量。第二种方法被广泛理解,更容易阅读,并且造成的混乱更少 第一种方法,使用ifndef/endif更适用于

我有一个主makefile,它有变量的默认值,然后是一个包含项目特定设置的子makefile。在子makefile的末尾,我包含了主makefile

我一直在主makefile中使用以下代码来设置变量的默认值

ifndef CC
    CC = avr-gcc
endif
最近我读到我也能做到

CC ?= avr-gcc

因此,我的问题是,两者是否相同,如果是的话,建议哪一种方法覆盖变量。

第二种方法被广泛理解,更容易阅读,并且造成的混乱更少

第一种方法,使用
ifndef/endif
更适用于您不只是想设置一个变量的情况,比如根据是否设置了
DEBUG
或其他内容来切换许多事情


如果您只想设置一个尚未设置的变量,那么
var?=value
就足够了

谢谢你的快速回答。我需要再等4分钟才能接受你的回答:)事实证明,
CC
CXX
都不能被覆盖@Sudar我怀疑在你的makefile中设置/导出它们之后,还有其他东西在设置它们-有孩子直接而不是有条件地分配吗<代码>=而不是
?=
?暂时忘记
?=
:我不确定我看到了用
ifndef CC
包装CC作业的意义。GNU make手册明确规定,命令行变量赋值优先于makefile中的赋值,除非使用
override
关键字。