2013-02-20 1 views
5

У меня есть Makefile, который работает отлично вызывается из новой оболочки, т.е.Вызова сделать из в Makefile

make -C /dir/ 

Однако, если я называю этот Makefile из другого Makefile, он терпит неудачу из-за некоторые сложными проблемы зависимости. Четко ознакомьтесь с вложенными вызовами, о чем свидетельствует печать make[1]: и т. Д., И я подозреваю, что make как-то разделяет переменные с его дочерним процессом.

Можно ли позвонить clean сделать изнутри Makefile? Если моя сборка работает из чистой оболочки, ее можно будет вызвать из другого Makefile без обращения к ужасам внутри скрипта! :)

Спасибо!

+0

Это непросто. Вы имеете в виду, что makefile_1 терпит неудачу, когда он вызывается из * specific * makefile_2 или из * any * другого make-файла (например, тривиального, который ничего не делает)? – Beta

+0

Хмммм, странно. Сравните вывод 'make -p' в каждом случае. (Разумеется, я всегда запускаю _make_ с '-Rr' и' -warn'-YMMV.) – bobbogo

ответ

8

make действительно разделяет часть своей среды, когда он рекурсивно называется. Как было предложено в https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion, вы можете написать рекурсивный вызов таким образом:

sub-make: 
     $(MAKE) -C /dir/ MAKEFLAGS= 

и посмотреть, если это помогает. Вы также можете контролировать переменные, которые экспортируются в суб-сделать с помощью export и unexport директивы (https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion)

1

Это было несколько переменных окружения в вызывающем макияже, который сломал марку вызываемого абонента (CFLAGS и т.д ...)

Мое решение состояло в том, чтобы отличить среду от чистой оболочки и от точки вызова. Затем я вручную добавил переменные проблемы в список и создал несколько скриптов save_env/restore_env.

Спасибо!

Смежные вопросы