在 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_build
和 post_build
定义在另一个您不能更改的 makefile 中,只需这样做:
include Makefile.other
post_build: build_docker
build_docker: pre_build
...
build: post_build
我有一个按以下方式松散定义的 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_build
和 post_build
定义在另一个您不能更改的 makefile 中,只需这样做:
include Makefile.other
post_build: build_docker
build_docker: pre_build
...
build: post_build