在Vagrant VM中从Python调用'make'

时间:2015-04-30 08:50:45

标签: python ubuntu gcc makefile vagrant

好的,所以这个问题非常针对具体项目,但对我来说这是一个问题。

我有一个Python / django网站,由Vagrant设置的Ubuntu VM托管在localhost上。从这个网站我想粘贴C代码并通过一系列Python函数进行编译。在其中一个函数中,我这样称make

arg2 = os.path.join(Default_SDK_PATH, "examples/peripheral/blinky")
arg4 = os.path.join(Default_SDK_PATH, "examples/peripheral/blinky/makefile")
args = ' '.join(['make', '-C', arg2, '-f', arg4])

p = subprocess.Popen(
    args,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    shell=True
)
output, errors = p.communicate()
p.wait()

我指定arg2arg4更多用于测试而不是其他任何东西 - 只是100%确定使用了正确的makefile。

### ### ###

OK! 所以我的问题出现在子进程运行时。使用make调用makefile,但是文件错误。当我检查构建日志时,我可以看到错误消息arm-none-eabi-gcc: error: nano.specs: No such file or directory

第一次调用vagrant up时,会调用名为bootstrap.sh的文件。我试过在这个文件中添加新命令

sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi=4.9.3.2015q1-0trusty13

卸载Ubuntu的原始GCC并安装最新的GCC工具链。也没有成功。我也尝试将整个文件结构返回到文件,以检查有问题的文件是否存在,并且它们确实存在!

有人能指出我在正确的方向吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

Whoop-di-hoo,我解决了!

我并不完全知道为什么,但sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi似乎没有做任何事情,所以当我尝试安装新的GCC时,原始的GCC文件仍然存在。< / p>

此外,新的GCC安装在/usr/bin,而旧的GCC有自己指定的文件夹。

所以我编辑了我的Makefile以从arm-none-eabi-gcc-4.9.3而不是旧的/usr/bin获取arm-none-eabi-gcc。现在包括nano.specs,生活很棒!