【问题标题】:Ignore prereq Makefile targets忽略 prereq Makefile 目标
【发布时间】:2022-10-23 16:16:44
【问题描述】:

我有一个 Makefile:

.PHONY: target0 target1

target0:
    <command>

target1: target0
    <command>

如何运行make target1 并强制它跳过target0

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    我所知道的 GNU make 和任何其他 make 都没有提供忽略过时先决条件的方法。这与make 的设计和目标背道而驰。不存在的目标或(使用 GNU make)为 .PHONY 的目标在运行开始时始终被视为已过期。因此,使用该 makefile,make target1 也将始终构建 target0

    您提出这个问题表明您已经将某些东西建模为先决条件,而这并不是真正的先决条件。例如,也许您这样做是为了汇总目标。在这种情况下,您可以考虑重写您的 makefile,可能是这样的:

    .PHONY: all target0 target1
    
    target0:
        <command>
    
    target1:
        <command>
    
    all: target0 target1
    

    有了它,您可以选择只构建target0 或只构建target1 或两者(all),但您确实需要同时请求这两者,而这实际上是您想要的。当您同时请求两者时,您将大概除非您使用-j 选项,否则在target1 之前构建target0。但是,如果您需要确保在构建两者时首先构建 target0,那么您可以这样做:

    .PHONY: all target0 target1
    
    target0:
        <command>
    
    target1:
        <command>
    
    all:
            make target0
            make target1
    

    【讨论】:

    • 好的,不是我希望的答案,但仍然有帮助。感谢您的输入。
    【解决方案2】:

    使用 GNU make:make -W target0 target1,参见GNU make 手册中关于“如何运行 make:避免重新编译某些文件”的 --what-if 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 2014-11-27
      相关资源
      最近更新 更多