Как вызвать оболочку, чтобы создать новую среду для запуска make внутри другого make? - PullRequest
2 голосов
/ 16 июня 2010

Я бы хотел, чтобы в моем GNUmakefile было целевое правило, которое вызывает новую оболочку, а затем с чистого листа новой оболочки запускает новый make.

Какой синтаксис для этого?*

Я попробовал это, но это не сработало:

.PHONY: setup
setup:
 shell cd myDir; make; cd ..

Он получает бесконечное повторение следующей ошибки:

make[1]: Entering directory `/disk4/home/user/parent'
shell cd myDir; make; cd ..
/bin/sh: shell: command not found
make[1]: Entering directory `/disk4/home/user/parent'
shell cd myDir; make; cd ..
/bin/sh: shell: command not found
[...]

Ответы [ 3 ]

2 голосов
/ 16 июня 2010
(cd myDir ; make)

Парены вызывают новый подоболочек с собственным «текущим каталогом».

1 голос
/ 23 сентября 2010

Парены не нужны.В любом случае каждая строка в рецепте вызывается в своей собственной оболочке.Кажется, в вашем рецепте есть лишняя строка shell , которую ваша оболочка пытается выполнить как команда (/ bin / sh (ваша оболочка, not make) жалуется shell: command not found).

Также в этом случае удобен параметр make -C.

Также при вызове make из оболочки используйте макрос ${MAKE}.

.PHONY: setup
setup:
    unset MAKEFLAGS; ${MAKE} -C myDir
0 голосов
/ 16 июня 2010

Вот что работает:

.PHONY: setup
setup:
 (cd myDir; env --unset=MAKEFLAGS make)
...