【问题标题】:change default all to something else in makefile [duplicate]将默认值全部更改为makefile中的其他内容[重复]
【发布时间】:2013-01-23 05:16:58
【问题描述】:

在 makefile 中构建多个目标的情况下,当我说“make”时,默认情况下会生成所有目标。是否可以将 all 的默认值更改为其他值?

all : target1 target2 

现在,当我发出命令 'make' 时,我只想构建 target1。

【问题讨论】:

    标签: linux makefile


    【解决方案1】:

    只需添加一行:

    target1:
    

    在定义all 的规则之前。名称all 并不特殊:由于是列出的第一条规则,它成为默认值。通过在该行之前添加target1:target1 成为默认值。请注意,允许规则的多个定义不是标准行为(这基本上是一个假规则,其行为稍后在 Makefile 中定义),但这将适用于 gnu make。如果不行,把target1的实际定义移到all的定义之前。

    【讨论】:

      【解决方案2】:

      就像 Carl 提到的那样,您可以从行中删除 target2。

      但是,如果您仍然希望所有人都制作 target1 和 target2,还有一些选择...

      你没有说你使用的是哪个品牌,这些细节取决于版本,但我会详细说明它是如何在 GNU make 上工作的。

      在 GNU make 中,第一个目标成为默认目标。所以如果你有一个像这样的 Makefile:

      next:
              @echo "next"
      
      all:
              @echo "All"
      

      它将打印:

      $ make
      next
      

      您还可以更改默认目标:

      .DEFAULT_GOAL=other
      
      next:
              @echo "next"
      
      
      all:
              @echo "All"
      
      other:
              @echo "other"
      

      它会显示:

      $ make
      other
      

      这是与:

      $ make --version
      GNU Make 3.81
      

      【讨论】:

      • 所以 .DEFAULT_GOAL 是标准变量,当没有指定其他目标名称时,将构建该目标。对吗?
      • DEFAULT_GOAL 不是标准变量,尽管它可以被 gnu make 识别。标准行为是将 Makefile 中指定的第一条规则设为默认值。
      • .DEFAULT_GOAL 由 GNU make 信息页面记录。正如我在回答中指出的那样,我假设 GNU 品牌,并且可能不适用于其他品牌。
      • 我用过 GNU make,效果很好,谢谢!
      【解决方案3】:

      当然,只需从该行中删除 target2

      【讨论】:

        猜你喜欢
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 2017-11-12
        • 2020-07-12
        • 2018-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多