3 回答
TA貢獻1862條經驗 獲得超7個贊
您有幾個選項可以從makefile外部設置變量:
從環境 - 每個環境變量都轉換為具有相同名稱和值的makefile變量。
您可能還想設置
-e選項(aka--environments-override),您的環境變量將覆蓋makefile中的賦值(除非這些賦值本身使用該override指令。但是,不建議這樣做,并且使用?=賦值(條件變量)更好更靈活賦值運算符,它只有在尚未定義變量時才有效:):FOO?=default_value_if_not_set_in_environment
請注意,某些變量不是從環境繼承的:
MAKE是從腳本的名字得到的SHELL要么在makefile中設置,要么默認為/bin/sh(基本原理:命令在makefile中指定,并且它們是特定于shell的)。從命令行 -
make可以將變量賦值作為其命令行的一部分,與目標混合:make target FOO=bar
但是,除非在賦值中使用該指令,否則將忽略makefile中變量的所有
FOO賦值。(效果與環境變量選項相同)。override-e從父Make導出 - 如果從Makefile調用Make,通常不應該顯式寫這樣的變量賦值:
# Don't do this!target: $(MAKE) -C target CC=$(CC) CFLAGS=$(CFLAGS)
相反,更好的解決方案可能是導出這些變量。導出變量使其進入每個shell調用的環境中,并且使用這些命令進行調用將按照上面的指定選擇這些環境變量。
# Do like thisCFLAGS=-gexport CFLAGStarget: $(MAKE) -C target
您也可以使用不帶參數導出所有變量
export。
TA貢獻1827條經驗 獲得超9個贊
假設您有一個這樣的makefile:
action: echo argument is $(argument)
然后你會打電話給它 make action argument=something
添加回答
舉報
