Как заказать задачи и подзадачи с помощью make? - PullRequest
1 голос
/ 13 марта 2019

Я использую GNU make как инструмент для выполнения некоторых задач.Предположим, у меня есть две задачи, A и B, которые имеют подзадачи.Я должен выполнить задачу B (и ее подзадачи) перед задачей A.

У меня есть этот минимальный рабочий пример

all: task1

task1: task2    

task1: task1.1
    @echo task1

task1.1: task1.2
    @echo task1.1

task1.2:
    @echo task1.2

task2: task2.1
    @echo task2

task2.1: task2.2
    @echo task2.1

task2.2:
    @echo task2.2

В любом случае, это не работает должным образом, так как вывод такой:

task1.2
task1.1
task2.2
task2.1
task2
task1

Вместо этого я хотел бы получить

task2.2
task2.1
task2
task1.2
task1.1
task1

, просто указав зависимость task1: task2, то есть подзадачи не должны быть задействованы.

Я былв состоянии получить такое поведение, поставив задачу 1: задача 2 в поле задача 1: задача 1.1, но рекомендуется разрабатывать зависимости таким образом, чтобы они не зависели от их порядка.

Есть ли альтернативный способ достижения этого?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Я пытаюсь ответить на свой вопрос. Это работает как ожидалось:

all: task1

task1.depends: task2

tasks1 = task1.1 task1.2

tasks2 = task2.1 task2.2

task1: task1.1
    @echo task1

task1.1: task1.2
    @echo task1.1

task1.2:
    @echo task1.2

task1.depends:

$(tasks1): task1.depends

task2: task2.1
    @echo task2

task2.1: task2.2
    @echo task2.1

task2.2:
    @echo task2.2

task2.depends:

$(tasks2): task2.depends

У вас есть предложения по улучшению?

0 голосов
/ 13 марта 2019

Вы можете использовать только для заказа предпосылки . Поскольку вы хотите запустить task2 до task1.2, вы можете добавить | task2 в качестве предпосылки для заказа task1.2.

all: task1

task1: task2    

task1: task1.1
    @echo task1

task1.1: task1.2
    @echo task1.1

task1.2: | task2
    @echo task1.2

task2: task2.1
    @echo task2

task2.1: task2.2
    @echo task2.1

task2.2:
    @echo task2.2
...