【发布时间】:2019-04-29 19:56:30
【问题描述】:
多年来我一直使用 GCC 来编译使用 Eclipse 开发的 ARM 项目。我决定是时候更新我正在使用的工具了。
我一直在使用 CodeSourcery 的 GCC 'cribbed' 版本,但我已从 http://gnutoolchains.com/arm-eabi/ 升级到最新版本。一切正常,除了 Make:
CodeSourcery 文件夹包含一个名为 cs-make.exe 的版本,日期为 2013 年 4 月 30 日。我已经从http://gnutoolchains.com/arm-eabi/ 下载了更新版本的 GCC/GDB 到我命名为 SysGCC 的文件夹中。它包含应用程序 make.exe,日期为 27/05/2015。
我已经修改了我的 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 构建。那么,出了什么问题呢?
【问题讨论】:
-
我会发布你的整个makefile。另外,我看到
-j[parallel],所以不要使用它(即您可能需要更多依赖项来进行并行构建)。而且,您正在使用的 exact 命令是什么(例如)make all。可以make clean吗?另外,请编辑您的问题以修改它而不是回答它。可以回答您自己的问题如果您确实有答案[大多数人通常不会回答,除非答案超过 30,000 个字符] -
如果你运行
make.exe --version和cs-make.exe --version,你会得到什么?根据您在此处的扩展,您在 Windows 上(您应该清楚这一点)。 GNU make 有多种方式可以在 Windows 上构建,因此可能会非常混乱(由于区分大小写/不区分大小写、驱动器号支持等)