我有一个奇怪的问题。过去4周,我已经使用GNU make而没有任何问题。我将我的make文件指向一个avr工具链以进行ATMEL处理器的交叉编译。几天前,GNU make停止工作。当我运行 make
时,我会得到以下输出:
make (e=-1): Error -1
make: *** [main.o] Error -1
为了更好地了解问题,我仅使用
make -n
来运行代码以输出回显。它打印了Makefile中的所有语句,包括命令。以下是输出的一小部分片段: echo
echo "=================================="
echo "Compiling: " main.c
echo "=================================="
"/c/Users/Shane Reynolds/Documents/CDU_embeddedSystems/CDUEmbeddedToolbox/avr_tools/bin/avr-gcc" -c -std=gnu99 -g -mmcu=atmega1281 -DF_CPU=16000000UL -Wall -Wstrict-prototypes -Os main.c -o main.o
你可以看到该命令在这段短输出的末尾被打印出来。如果我复制并粘贴该命令到终端,那么该进程将正常运行 - 但每次都这样做有点麻烦。为了试图了解 GNU make 失败的原因,我运行了调试标记
make -d
并收到了大量的输出。我认为重要的部分如下所示: CreateProcess(C:\Users\Shane Reynolds\Documents\CDU_embeddedSystems\CDUEmbeddedToolbox\avr_tools\utils\bin\echo.exe,echo,...)
Putting child 0x0043fdf0 (main.o) PID 4486808 on the chain.
Live child 0x0043fdf0 (main.o) PID 4486808
Main thread handle = 0x000000a8
Reaping winning child 0x0043fdf0 PID 4486808
Live child 0x0043fdf0 (main.o) PID 4488168
Reaping losing child 0x0043fdf0 PID 4488168
make (e=-1): Error -1
make: *** [main.o] Error -1
Removing child 0x0043fdf0 PID 4488168 from chain.
有人能帮我解决这个问题吗?我已经花了几天时间来尝试解决它。我真的希望这不是什么非常明显或简单的错误。
编辑:为了增加一些背景,我在Windows 8上使用它 - 当我从bash或cmd运行make
时,我得到同样的错误消息。我的makefile链接如下:
进一步编辑:我创建了一个非常简单的makefile和非常简单的源代码 - 运行这个会产生相同的错误,但我可以像前一个案例一样手动使用AVR工具链进行编译和链接。
avr-gcc
命令的代码很好用 - 我可以手动创建.o
,.elf
和.hex
文件。我也没有问题将程序加载到目标处理器中。据我所知,make只是一个脚本,它指向您想要用于编译的各种工具。 - Shane Reynoldsmake -n
输出的命令),工具链仍然可以正常工作。此外,我尝试回滚到较早的 makefile 和之前已知可以工作的源代码main.c
,但错误在这两种情况下仍然存在。 - Shane Reynolds