æ¥è‡ªdocs:
 Âç‰¹å®šäºŽç›®æ ‡çš„å˜é‡å…·æœ‰ä¸Žå…¶ä»–å˜é‡ç›¸åŒçš„优先级   makefileå˜é‡ã€‚在命令行上æ供的å˜é‡ï¼ˆå’Œ   环境如果' -e'选项有效)优先。   指定'覆盖'指令将å…è®¸ç‰¹å®šäºŽç›®æ ‡   å˜é‡å€¼æ˜¯é¦–选。
所以,一个简å•çš„makefile,如:
# A pattern-specific variable assignment.
% : foo += file
all : x ;
# Target is a double-colon w/o dependencies, so Make will ALWAYS run its commands.
x ::
@echo '$(foo)'
è·‘æ¥ï¼Œæˆ‘们得到:
# Override makefile-level variables, with a command-line assignment.
$ make foo=cmd
cmd cmd cmd
# Set the value in the environment, And tell Make to prefer it over any makefile-level definitions.
$ foo=env make --environment-overrides
env file file
现在返回上é¢çš„引文,æ¥è‡ªæ–‡æ¡£ï¼š
 Â命令行上æ供的å˜é‡ï¼ˆä»¥åŠåœ¨ï¼†ï¼ƒ39; -e'选项生效的环境ä¸ï¼‰å°†ä¼˜å…ˆä½¿ç”¨ã€‚
看æ¥ï¼Œä½¿ç”¨å…¶ä¸ä¹‹ä¸€ï¼š
-e
(--environment-overrides
)。相åŒæ•ˆæžœï¼Œå³è¦†ç›–文件级(makefile)å˜é‡ã€‚
但是,结果差别很大。请记ä½ï¼Œå‘½ä»¤è¡Œä¸ç»™å‡ºçš„值为:cmd
,环境ä¸ç»™å‡ºçš„值为:env
。
现在,比较为命令行覆盖与环境覆盖的值:
cmd cmd cmd
(对于命令行覆盖)。env file file
ï¼ˆé€‚ç”¨äºŽçŽ¯å¢ƒè¦†ç›–ï¼‰ã€‚å› æ¤ï¼Œå¯¹äºŽå‘½ä»¤è¡Œï¼ŒMakeé‡å¤ç›¸åŒçš„值,å³cmd
, 3次,对于环境覆盖,情况是ä¸åŒå³å¯ã€‚也就是说,Make will"é‡å¤ï¼†ï¼ƒ34;环境级值:env
ä»… 1 时间,然åŽé‡å¤ - 除了é‡å†™æ–‡ä»¶çº§å€¼ï¼šfile
。
现在,"覆盖"ä¸ä»…情况完全ä¸åŒã€‚æ¥è‡ªå‘½ä»¤è¡Œä¸Žï¼†ï¼ƒ34;覆盖"æ¥è‡ªçŽ¯å¢ƒï¼Œè¿™æœ¬èº«å¾ˆå¥‡æ€ªï¼Œè¿™é‡Œçš„问题è¦å¤§å¾—多。
å› ä¸ºï¼Œåˆ¶å®šè§„åˆ™ä»¥ç»™äºˆï¼†ï¼ƒ34;优先级"对于命令行(或环境)值,为什么它åšæŒè¿½åŠ "其他"值(如在环境覆盖的情况下,Makeé™„åŠ ï¼†ï¼ƒ34;文件文件"),或者在命令行覆盖的情况下(其ä¸Make é‡å¤ç›¸åŒçš„值*** 3 * 次)。严é‡ï¼Ÿ
它是如何有æ„义的?这些ä¸ä¸€è‡´å’Œå¥‡æ€ªçš„结果的ç†ç”±æ˜¯ä»€ä¹ˆï¼Ÿ
ç”案 0 :(得分:2)
我相信这里的ç”案与this other question of yoursçš„ç”案有关。 (å¯èƒ½æ˜¯env覆盖版本ä¸çš„一个错误。)
全局å˜é‡å’Œç‰¹å®šäºŽç›®æ ‡çš„å˜é‡æ˜¯ä¸åŒçš„å˜é‡ã€‚
cmd cmd cmd
ç»“æžœæ˜¯å› ä¸ºå½“æ‚¨ç¼–å†™%: foo += file
时,将å˜å‚¨ä½œä¸ºå˜é‡{{1}çš„ç‰¹å®šäºŽç›®æ ‡çš„å€¼çš„å˜é‡foo
的当å‰å€¼çš„补充。 } foo
。
但是,当您在命令行上设置file
时,make ä¼šè¦†ç›–ç‰¹å®šäºŽç›®æ ‡çš„å˜é‡foo
的值,而ä¸æ˜¯foo
而ä¸æ˜¯{{ 1}}ã€‚å› æ¤ï¼Œå½“æ¯æ¬¡èŽ·å¾—cmd
时,使å˜é‡æˆä¸ºå˜é‡ã€‚
æˆ‘è®¤ä¸ºï¼Œé‚£ä¸ªè§£é‡Šåº”è¯¥è®©ä½ file
然åŽæˆ‘ä¸çŸ¥é“为什么它ä¸ä¼šã€‚è¿™å¯èƒ½æ˜¯ä¸€ä¸ªé”™è¯¯ï¼Œä¹Ÿå¯èƒ½æ˜¯å…³äºŽenv如何覆盖å˜é‡å’Œç‰¹å®šäºŽç›®æ ‡çš„å˜é‡å€¼çš„其他细节。我ä¸ç¡®å®šã€‚
(检查这两ç§æƒ…况的cmd cmd cmd
è¾“å‡ºï¼Œçœ‹çœ‹æˆ‘å¯¹ç‰¹å®šç›®æ ‡å˜é‡çš„值的å«ä¹‰ã€‚)