【问题标题】:Compatibility between versions of GNU MakeGNU Make 版本之间的兼容性
【发布时间】: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 --versioncs-make.exe --version,你会得到什么?根据您在此处的扩展,您在 Windows 上(您应该清楚这一点)。 GNU make 有多种方式可以在 Windows 上构建,因此可能会非常混乱(由于区分大小写/不区分大小写、驱动器号支持等)

标签: c eclipse gcc makefile


【解决方案1】:

感谢两位的回复。

我花了很多令人沮丧的时间尝试 GCC、OpenOCD、JTag 驱动程序和 Eclipse 插件的不同组合。我有很多构建版本的项目都可以使用我以前的工具链,我尝试将其中的各种复制到我用来测试新工具链的项目中。

我最终找到了解决方案。我设法破坏了我的项目以使用来自一个构建版本的源文件和来自另一个版本的 makefile,并且它们之间存在不兼容问题。

这些症状非常具有欺骗性,让我走上了各种死胡同。我仍然不明白为什么它适用于一个版本的 make 而不是另一个版本。

当我更正项目时,一切正常。

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2019-08-27
    相关资源
    最近更新 更多