Makefile с переменной окружения PATH на Mac - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь выполнить qemu-system-arm во время компиляции Makefile. Я уже отредактировал:

  • .bash_profile
  • .profile
  • / и т.д. / пути

И это прекрасно работает в команде оболочки, которая $qemu-system-arm, но мой Makefile не работает. Вот мой пример Makefile:

qemu:
     qemu-system-arm -machine help

Я получаю эти ошибки с помощью команды $make qemu:

qemu-system-arm -machine help
make: qemu-system-arm: No such file or directory
make: *** [qemu] Error 1

Кстати, мой qemu не был установлен brew, потому что мне нужна другая платформа, такая как stm32-p103. Так что после сборки моего собственного qemu я должен соответственно установить $ PATH.

Вот моя версия ОС:

macOS Mojave v10.14.1

1 Ответ

0 голосов
/ 18 ноября 2018

Когда make выполняет рецепты правила, он передает его в оболочку.Итак, чтобы использовать qemu-system-arm, оболочка должна знать, где ее найти.Это зависит от того, какая оболочка использует (sh, bash, другое?) И какой файл конфигурации эта оболочка читает при запуске (~/.profile, ~/.bashrc, другое?).

Выможно исследовать с помощью простого правила теста в вашем make-файле:

$ cat Makefile
...
.PHONY: test
test:
    echo 'SHELL=$(SHELL)'
...
$ make test
SHELL=...

В вашем случае оболочка, вероятно, не является оболочкой Борна (sh), потому что ~/.profile читается sh, поэтомунаверное работает.Таким образом, возможно, что оболочка, используемая make, является bash: поскольку оболочка, созданная make, не является оболочкой входа в систему, она не читает ~/.profile и ~/.bash_profile.Вы должны добавить определение PATH в свой ~/.bashrc:

 echo 'export PATH=$PATH:/path/to/qemu-system-arm' >> ~/.bashrc

Или, если вы не хотите изменять все процессы bash, вы можете добавить это определение в свой Makefile (переменные среды становятся makeпеременные в контексте make):

$ cat Makefile
PATH := $(PATH):/path/to/qemu-system-arm
...

Обратите внимание, что вы также можете принудительно заставить make использовать нужную оболочку (но учтите, что это отрицательно влияет на переносимость вашего make-файла):

 SHELL := /usr/local/bin/my-preferred-shell
...