即使在链接步骤中存在未定义的参考错误,小型设备 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 文件。