【问题标题】:Problem using SDCC in a Makefile during the link step在链接步骤期间在 Makefile 中使用 SDCC 时出现问题
【发布时间】:2010-07-22 18:33:18
【问题描述】:

即使在链接步骤中存在未定义的参考错误,小型设备 C 编译器 (SDCC) 也会生成 ihx(英特尔十六进制)文件。在 Makefile 中使用 SDCC 时,此行为会导致问题,因为如果您将 ihx 文件设置为您的 make 目标,则 make 无法知道之前的链接尝试是否失败。

在链接过程中有未定义的引用时,有没有办法告诉 SDCC 禁止 ihx 输出?如果没有,最好的解决方法是什么?(我已经想到了一个)。

另外,如果有人知道,我对为什么SDCC 是这样设计的很感兴趣。

这是一个问题示例:

你有一个名为 test.c 的文件,它调用了一个未定义的函数:

void foo();
void main()
{
    foo();
}

您有一个简单的 Makefile 用于从 test.c 构建 test.ihx:

test.ihx: test.c
    sdcc test.c

第一次尝试编译 test.c 失败:

C:\test>make
sdcc test.c

?ASlink-Warning-Undefined Global '_foo' referenced by module 'test'
make: *** [test.ihx] Error 1

您尝试通过更改不依赖于 ihx 的内容(例如 Makefile)来解决问题,然后尝试再次编译:

C:\test>make
make: `test.ihx' is up to date.

但是 make 不会尝试编译它,因为 SDCC 已经创建了 ihx 文件。

【问题讨论】:

    标签: makefile undefined-reference sdcc


    【解决方案1】:

    我对 sdcc 一无所知,所以很抱歉我无法回答您关于是否可以抑制输出或为什么 sdcc 是这样设计的问题。

    我可以想到一个解决方法:在成功构建后重命名 ihx 文件,并使用新名称作为 make 目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多