【问题标题】:chaining build targets in Makefile and maintaining order of execution在 Makefile 中链接构建目标并维护执行顺序
【发布时间】:2020-02-20 05:34:39
【问题描述】:

我有一个通过以下方式松散定义的 Makefile

pre_build:
    cp build/Dockerfile .

post_build:
    echo "complete"
    rm Dockerfile

build_docker:
    echo "do something with the Dockerfile"

build: pre_build build_docker post_build

但我的构建总是失败,抱怨找不到Dockerfile。但是,Dockerfile 的实际 pre_build 和实际副本有效。如果我删除 post_build 部分,构建完成后我可以在目录中看到 Dockerfile。 我一直认为在链式 Makefile 目标中,顺序是保持不变的。但这看起来,目标上的隐式并行构建顺序发生了一些奇怪的事情。

我尝试了多种强制命令的方法,但都没有奏效。

更新: 我在 Mac 和 Linux 上试过,同样的行为

【问题讨论】:

    标签: linux makefile build gnu-make


    【解决方案1】:

    几乎按照定义,并行构建没有强制顺序。试试这个:

    pre_build:
        ...
    
    post_build: build_docker
        ...
    
    build_docker: pre_build
        ...
    
    build: post_build
    

    编辑:

    如果pre_buildpost_build 定义在另一个你不能更改的makefile 中,那么就这样做:

    include Makefile.other
    
    post_build: build_docker
    
    build_docker: pre_build
        ...
    
    build: post_build
    

    【讨论】:

    • 感谢您的回答。但我不能这样做,因为 pre_build 和 post_build 来自另一个我无法控制的 Makefile。它被包含在实际的 make 文件中。
    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多