Использовать make-файл верхнего уровня в подкаталогах
У меня есть проект с такой структурой каталогов:
╷ /
├ Makefile
├┐ dir1/
│├ foo.in
│└ foo.out
├┐ dir2/
┊┊
и Makefile содержит правила для всех файлов в проекте, например
dir1/%.out: dir1/%.in
gen_out $< $@
Если я в каталоге верхнего уровня, я могу запустить make dir1/foo.out
просто хорошо.
Вопрос в том, каков самый элегантный способ вызова make foo.out
внутри dir1
имеет такой же эффект?
3 ответа
Ваш выбор ограничен. Вы можете использовать -f ../Makefile
флаг на make
командной строки, может быть, написав сценарий оболочки вокруг make
это определит текущее местоположение и вызовет его с соответствующими флагами в зависимости от того, где вы находитесь.
Вы можете установить MAKEFILES
Переменная окружения, содержащая полное имя make-файла.
Вы можете создать маленький мини-make-файл в каждом каталоге, который ничего не делает, кроме повторного вызова $(MAKE)
с правильным make-файлом верхнего уровня.
Вы можете сделать это легко с makepp. Просто переименуйте ваш Makefile в RootMakeppfile. Он будет загружен первым, где бы вы ни находились в своем дереве.
В отличие от традиционных make, makepp не нужно делать рекурсивные сборки. Таким образом, вы также можете поместить Makefile в каждый каталог, и makepp загрузит все нужные вам файлы в один процесс. Таким образом, он имеет единое представление о вашем проекте в целом и может обнаруживать и отслеживать все зависимости.