我正在尝试在Makefile编译中执行qemu-system-arm。我已经编辑过:
它在$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
答案 0 :(得分:0)
make执行规则的配方时,会将其传递给外壳。因此,为了使用qemu-system-arm
,外壳程序必须知道在哪里找到它。这取决于使用哪个shell(sh
,bash
,其他?)以及此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