在 Makefile 中链接构建目标并维护执行顺序

chaining build targets in Makefile and maintaining order of execution

我有一个按以下方式松散定义的 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。但是,实际 pre_build 和 Dockerfile 的实际副本有效。如果我删除 post_build 部分,构建完成后我可以在目录中看到 Dockerfile。 我一直认为在链接的 Makefile 目标中,顺序是保持不变的。但这看起来像在目标上隐式并行构建的顺序发生了一些奇怪的事情。

我尝试了多种方法来强制排序,但都没有用。

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

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

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