Выполнить несколько действий одновременно в make-файле

У меня следующее makefile.

Я хочу, чтобы step0 запускался, тогда я хочу, чтобы все сценарии b*.R запускали в то же время в step1. Когда step1 завершится, я хочу final бежать.

Когда я запускаю make или make -j 8, кажется, что все файлы b*.R продолжают работать последовательно. Это makefile правильно настроено для одновременного запуска всех b*.R файлов? Если нет, то что мне нужно изменить.

final : step1
    Rscript c.R

step1 : step0
    Rscript b1.R
    Rscript b2.R
    Rscript b3.R
    Rscript b4.R
    Rscript b5.R
    Rscript b6.R

step0 : 
    Rscript a.R
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы хотите, чтобы make выполнял за вас параллелизм, вам нужно реструктурировать make-файл, чтобы он имел другие цели. Например:

step1: b1 b2 b3 b4 b5 b6 
b1: step0
    Rscript b1.R
b2: step0
    Rscript b2.R
...

step0 : 
    Rscript a.R

Или вы можете позволить оболочке выполнить параллелизм и написать:

step1: step0
    Rscript b1.R & Rscript b2.R & \
    Rscript b3.R & ... & wait

Я бы рекомендовал первое.

step1: step0 b1 b2 b3 b4 b5 b6 Это неправильно, так как step0 не гарантируется, что она завершится до того, как b1 запустится.
Matt 30.05.2019 19:34
Ответ принят как подходящий

When I run make or make -j 8 it seems like all of the b*.R files still run sequentially.

-jN допускает параллельное выполнение разные рецепты, а не отдельных команд, составляющих рецепт.

Таким образом, makefile должен быть реструктурирован следующим образом:

.PHONY: final b1 b2 b3 b4 b5 b6 step0

final: b1 b2 b3 b4 b5 b6
b1 b2 b3 b4 b5 b6: step0

b1: ;Rscript b1.R
b2: ;Rscript b2.R
b3: ;Rscript b3.R
b4: ;Rscript b4.R
b5: ;Rscript b5.R
b6: ;Rscript b6.R

step0: ;Rscript a.R

Итак, похоже, что ключевая строка здесь final: b1 b2 b3 b4 b5 b6, что означает, что все b* цели необходимы для final запуска? Кроме того, .PHONY необходимо? Кроме того, будут ли файлы b запускаться одновременно, даже если не указано -jN?

Alex 30.05.2019 20:07

@Alex (1) Это называется «предпосылки». Любая предпосылка автоматически становится также целью, которая проверяется и, при необходимости, (пере)составляется перед первоначальной целью. (2) .PHONY говорит make, что следующие цели не являются реальными файлами, поэтому make никогда не утруждает себя проверкой их существования на диске, а просто выполняет соответствующие рецепты; это необходимо или нет, зависит от вашей настройки. (3) Нет, без -jN они выполняются последовательно слева направо (если между ними нет дополнительных зависимостей).

Matt 30.05.2019 20:24

Другие вопросы по теме