У меня есть make-файл, который вызывает скрипт Python, который находится в том же каталоге, что и make-файл.Это работает просто отлично.
В makefile # 1:
auto:
./myscript.py
Теперь у меня есть другой make-файл в другом каталоге, и я хочу вызвать первый make-файл из него.В makefile # 2:
target:
cd $(DIR); $(MAKE) auto;
Проблема в том, что когда скрипт запускается, он работает так, как если бы он находился в том же каталоге, что и makefile # 2.В stdout я вижу «make [3]: Leaving directory» и путь к # 1 сразу после выполнения make и перед запуском скрипта.
По предложению я попытался изменить make-файл # 2 так, чтобы:
target:
( cd $DIR; $MAKE auto; )
но это интерпретируется как "cd IR; AKE auto".Когда я заменяю скобки вокруг DIR и MAKE, я получаю то же поведение, что и раньше.
Я попытался изменить скрипт python, заставив его предположить, что он находится в директории # 2 и указав путь к # 1,но поведение не меняется.
Что происходит и что мне делать?
Обновление : мой комментарий ниже испортил форматирование кода, поэтому оно здесь:
Я попробовал это и получил по сути то, что вы описываете.Может быть, это как-то связано с тем, что target auto вызывает файл "makefile.rules"?
auto:
@echo this is makefile \#1 making $@ in $(PWD)
FLAG=1 $(MAKE) -f makefile.rules rulestargetA
FLAG=2 $(MAKE) -f makefile.rules rulestargetB
./myscript.py
Я упустил этот факт для простоты, но теперь мне интересно.
Обновление 2 : я не понимаю, почему make-файлы не вызывают запуск myscript.py, как если бы он находился в каталоге, в котором он находится, но я пытался заставить скрипт работать правильно, даже когдавызывается из другого каталога.Он открывает пару подпроцессов, запускает исполняемый файл в каждом подпроцессе и сохраняет стандартный вывод из каждого подпроцесса в файлы.Подпроцесс Python.Popen передает текущий рабочий каталог, который будет по умолчанию вызываться из сценария, а не из того места, где он находится.Я добавил скрипт для передачи в жилой каталог как cwd в вызов Popen.Однако по какой-то причине, когда я запускаю myscript.py в своем собственном каталоге, он работает, но когда я вызываю его из другого места (из командной строки), он зависает в proc.communicate ().Я должен решить эту проблему с Python, но я все еще хотел бы знать, почему внешний make-файл не может вызвать этот скрипт из своего собственного каталога.