объединение целей сборки в Makefile и поддержание порядка выполнения - PullRequest
0 голосов
/ 24 октября 2019

У меня 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 порядок поддерживается. Но похоже, что происходит нечто странное с порядком неявных параллельных сборок для целей.

Я пробовал несколько способов навести порядок, но ничего не получалось.

upd: я пробовал в Mac и Linux, такое же поведение

1 Ответ

2 голосов
/ 24 октября 2019

Параллельные сборки не имеют принудительного порядка, почти по определению. Попробуйте это:

pre_build:
    ...

post_build: build_docker
    ...

build_docker: pre_build
    ...

build: post_build

РЕДАКТИРОВАТЬ:

Если pre_build и post_build определены в другом make-файле, который вы не можете изменить, просто сделайте это:

include Makefile.other

post_build: build_docker

build_docker: pre_build
    ...

build: post_build
...