У меня есть следующее правило в Makefile:Pushd не работает в Makefile
ninja:
git clone git://github.com/martine/ninja.git
pushd ninja
pwd
git checkout release
./configure.py --bootstrap
popd
Идея заключается в том, чтобы загрузить и построить ninja как зависимость проекта. Обратите внимание, что команда pwd
находится там, чтобы убедиться, что каталог был нажат. Вот вывод он генерирует:
git clone git://github.com/martine/ninja.git
Cloning into 'ninja'...
remote: Counting objects: 8646, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 8646 (delta 0), reused 0 (delta 0), pack-reused 8642
Receiving objects: 100% (8646/8646), 1.88 MiB | 427.00 KiB/s, done.
Resolving deltas: 100% (6114/6114), done.
Checking connectivity... done.
pushd ninja
~/Desktop/core/ninja ~/Desktop/core
pwd
/Users/fratelli/Desktop/core
git checkout release
error: pathspec 'release' did not match any file(s) known to git.
make: *** [ninja] Error 1
Как вы можете видеть, что директория получить толкнул в стек, но pwd
не возвращает правильный каталог. Вот почему после этого checkout
. Любые идеи, как это исправить?
Можете ли вы проверить следующий «pushd ninja && pwd»? – higuaro
Он работает! Теперь он терпит неудачу в строке './Configure'. Кажется, что он только меняет каталог на время действия команды. Я предполагаю, что экземпляр оболочки создается для каждой командной строки? –
Этот 'pushd ninja && git checkout release && ./configure.py --bootstrap' работает, но я думаю, что он может быстро запутаться ... –