1

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

4

1 回答 1

1

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

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

于 2010-07-22T18:45:28.183 回答