多年来我一直在使用GCC来编译使用Eclipse开发的ARM项目。我决定是时候更新我正在使用的工具了。
我一直在使用CodeSourcery中“抄写”的GCC版本,但是我已经从http://gnutoolchains.com/arm-eabi/升级到最新版本。一切正常,除了Make:
CodeSourcery文件夹包含一个名为cs-make.exe的版本,日期为30/04/2013。我已经从http://gnutoolchains.com/arm-eabi/下载了较新版本的GCC / GDB到名为SysGCC的文件夹中。它包含日期为2015年5月27日的应用程序make.exe。
我修改了我的makefile以使用SysGCC,它可以正确编译。但是,如果我随后修改项目以运行make.exe而不是cs-make.exe,则控制台将显示以下错误:
make -j -k all make: *** No rule to make target `IO.o', needed by `Display.elf'. make: *** No rule to make target `XTPcommon.o', needed by `Display.elf'. make: *** No rule to make target `DisplayCommon.o', needed by `Display.elf'. . .
我的makefile的内容非常复杂,包括以下内容:
%.o : %.c makefile $(COMPILE) -c $(CFLAGS) $< -o $(OUTPUT_FOLDER)/$@ $(COMPILE) -MM $(CFLAGS) $< > $(OUTPUT_FOLDER)/$(addsuffix .d, $(notdir $(basename $@)))
由于它们可以正确地使用cs-make.exe
进行构建,所以我看不出为什么不应该使用make.exe
进行构建。那么,怎么了?
答案 0 :(得分:0)
谢谢你们的回答。
我花了很多令人沮丧的时间来尝试GCC,OpenOCD,JTag驱动程序和Eclipse插件的不同组合。我有一个项目的大量构建版本,都可以与我以前的工具链一起使用,并且我尝试将其中的各种版本复制到用于测试新工具链的项目中。
我最终找到了解决方案。我设法以某种方式破坏了我的项目,以使用一个版本的源文件和另一个版本的makefile,并且它们之间存在不兼容问题。
这些症状极具欺骗性,并导致我进入各种盲目的小巷。我仍然不明白为什么它可以与一个版本的make一起使用,而不能与另一个版本一起使用。
我更正了项目后,一切正常。