Как я могу создать make-файл для независимого запуска других make-файлов?

Я хочу иметь возможность запускать команду типа make subdir в файле make, расположенном в корне папки, который, в свою очередь, запускает другой файл make, расположенный в подкаталоге текущего.

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

subsystem:
     $(MAKE) -C ./subdir/

Я поместил код в файл make в корне, и когда я запускаю make в корне, он запускает файл make в папке подкаталога.

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

Поэтому, если я скажу make subfolder1 в корне, будет запущен make-файл в подпапке1, а если я скажу make subfolder2, будет запущен make-файл в подпапке2, и так далее, и тому подобное. Это достижимо?

Вы выяснили, как это сделать для одного подкаталога. В чем проблема просто добавить больше целей для других подкаталогов?

MadScientist 19.03.2022 06:12

@MadScientist Если я это сделаю, не будет ли make-файл запускать их все сразу при вызове? Я хочу иметь возможность звонить по одному.

Stephen 19.03.2022 07:02

@MadScientist На самом деле не обращайте внимания на мой последний комментарий, я смог сделать это с помощью кода в своем первоначальном вопросе и того, что вы предложили. Спасибо!

Stephen 19.03.2022 07:26

Make создает только запрошенные цели, а не все цели в make-файле. Цель может быть запрошена в командной строке или, если цель не указана, создается цель по умолчанию (это первая цель, найденная в make-файле).

MadScientist 19.03.2022 18:27
Стоит ли изучать 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
4
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

name1:
     $(MAKE) -C ./subdir1/

name2:
     $(MAKE) -C ./subdir2/

Спасибо @MadScientist за то, что он указал, что я понял, как делать то, что мне нужно, я наверняка слишком много думал об этом.

Я столкнулся с проблемой, из-за которой, когда я запускал make-файл с именем1 или именем2, мне выдавалось сообщение о том, что каталог обновлен. Даже если я зашел в подпапки и удалил все заполненные файлы в результате вызова соответствующих make-файлов, проблема все еще сохранялась.

Я смог обойти это, добавив приведенный ниже код в конец моего корневого файла make.

.PHONY: name1 name2...

Итак, теперь, когда я вызываю make name1 или make name2, файлы make в этих подпапках работают и делают то, что должны!

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