在Mac上具有PATH环境变量的Makefile

时间:2018-11-17 11:19:02

标签: macos makefile environment-variables qemu

我正在尝试在Makefile编译中执行qemu-system-arm。我已经编辑过:

  • .bash_profile
  • .profile
  • / etc / paths

它在$qemu-system-arm的shell命令中正常工作,但是我的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 :(得分:0)

make执行规则的配方时,会将其传递给外壳。因此,为了使用qemu-system-arm,外壳程序必须知道在哪里找到它。这取决于使用哪个shell(shbash,其他?)以及此shell在启动时读取哪个配置文件(~/.profile~/.bashrc,其他?)。

您可以使用makefile中的简单测试规则进行调查:

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

在您的情况下,该外壳可能不是bourne外壳(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使用所需的shell(但请注意,这会对makefile的可移植性产生负面影响):

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