亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從命令行傳遞其他變量來制作

從命令行傳遞其他變量來制作

從命令行傳遞其他變量來制作我可以將變量作為命令行參數傳遞給GNU Makefile嗎?換句話說,我想傳遞一些最終會成為Makefile變量的參數。
查看完整描述

3 回答

?
牧羊人nacy

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


查看完整回答
反對 回復 2019-07-31
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

最簡單的方法是:

make foo=bar target

然后在你的makefile中你可以參考$(foo)。請注意,這不會自動傳播到子品牌。

如果您正在使用子品牌,請參閱此文章:將變量傳遞給子品牌


查看完整回答
反對 回復 2019-07-31
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

假設您有一個這樣的makefile:

action:
    echo argument is $(argument)

然后你會打電話給它 make action argument=something


查看完整回答
反對 回復 2019-07-31
  • 3 回答
  • 0 關注
  • 562 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號