我有一个来自英特尔的makefile,其中有一些“?=”。 喜欢
COMPILER ?= $(GCC_PATH)g++
但是
EXECUTABLE = run
?=和=之间的区别是什么?我何时必须使用第一个而不是第二个?
非常感谢。
答案 0 :(得分:6)
Quoth the fine documentation:
如果您希望变量仅在尚未设置的情况下设置为值,则可以使用简写运算符'?='而不是'='。
答案 1 :(得分:0)
?=
用于条件赋值,即如果尚未定义则只分配值,否则保留它。在您的示例中,如果您提供make COMPILER=arm-none-gcc
,那么arm-none-gcc
用作编译器而不是默认的g ++,如果只键入make
,那么g ++将作为COMPILER的选项。如果使用=
,则会在遇到分配的时间和地点为COMPILER分配值。有关make文件的更多信息,请参阅
Understanding makefile for beginners