命令行å˜é‡ - 在makefile中 - 扩展为奇怪的值

时间:2015-08-19 05:22:10

标签: makefile gnu-make

æ¥è‡ª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'选项生效的环境中)将优先使用。

看æ¥ï¼Œä½¿ç”¨å…¶ä¸­ä¹‹ä¸€ï¼š

  1. 命令行分é…。
  2. 环境设置å˜é‡ï¼Œä½¿ç”¨-e(--environment-overrides)。
  3. 相åŒæ•ˆæžœï¼Œå³è¦†ç›–文件级(makefile)å˜é‡ã€‚

    但是,结果差别很大。请记ä½ï¼Œå‘½ä»¤è¡Œä¸­ç»™å‡ºçš„值为:cmd,环境中给出的值为:env。

    现在,比较为命令行覆盖与环境覆盖的值:

    1. cmd cmd cmd(对于命令行覆盖)。
    2. env file file(适用于环境覆盖)。
    3. 因此,对于命令行,Makeé‡å¤ç›¸åŒçš„值,å³cmd, 3次,对于环境覆盖,情况是ä¸åŒå³å¯ã€‚也就是说,Make will"é‡å¤ï¼†ï¼ƒ34;环境级值:envä»… 1 时间,然åŽé‡å¤ - 除了é‡å†™æ–‡ä»¶çº§å€¼ï¼šfile。

      现在,"覆盖"ä¸ä»…情况完全ä¸åŒã€‚æ¥è‡ªå‘½ä»¤è¡Œä¸Žï¼†ï¼ƒ34;覆盖"æ¥è‡ªçŽ¯å¢ƒï¼Œè¿™æœ¬èº«å¾ˆå¥‡æ€ªï¼Œè¿™é‡Œçš„问题è¦å¤§å¾—多。

      因为,制定规则以给予"优先级"对于命令行(或环境)值,为什么它åšæŒè¿½åŠ ï¼†ï¼ƒ34;其他"值(如在环境覆盖的情况下,Make附加"文件文件"),或者在命令行覆盖的情况下(其中Make é‡å¤ç›¸åŒçš„值*** 3 * 次)。严é‡ï¼Ÿ

      它是如何有æ„义的?这些ä¸ä¸€è‡´å’Œå¥‡æ€ªçš„结果的ç†ç”±æ˜¯ä»€ä¹ˆï¼Ÿ

1 个答案:

答案 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输出,看看我对特定目标å˜é‡çš„值的å«ä¹‰ã€‚)

相关问题