Я хочу иметь возможность запускать команду типа 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 Если я это сделаю, не будет ли make-файл запускать их все сразу при вызове? Я хочу иметь возможность звонить по одному.
@MadScientist На самом деле не обращайте внимания на мой последний комментарий, я смог сделать это с помощью кода в своем первоначальном вопросе и того, что вы предложили. Спасибо!
Make создает только запрошенные цели, а не все цели в make-файле. Цель может быть запрошена в командной строке или, если цель не указана, создается цель по умолчанию (это первая цель, найденная в make-файле).
Я смог добиться того, что мне было нужно, используя код в моем исходном вопросе и просто переименовав их в соответствии со своими потребностями.
name1:
$(MAKE) -C ./subdir1/
name2:
$(MAKE) -C ./subdir2/
Спасибо @MadScientist за то, что он указал, что я понял, как делать то, что мне нужно, я наверняка слишком много думал об этом.
Я столкнулся с проблемой, из-за которой, когда я запускал make-файл с именем1 или именем2, мне выдавалось сообщение о том, что каталог обновлен. Даже если я зашел в подпапки и удалил все заполненные файлы в результате вызова соответствующих make-файлов, проблема все еще сохранялась.
Я смог обойти это, добавив приведенный ниже код в конец моего корневого файла make.
.PHONY: name1 name2...
Итак, теперь, когда я вызываю make name1
или make name2
, файлы make в этих подпапках работают и делают то, что должны!
Вы выяснили, как это сделать для одного подкаталога. В чем проблема просто добавить больше целей для других подкаталогов?