在链接步骤中在Makefile中使用SDCC时出现问题

时间:2010-07-22 18:33:18

标签: makefile undefined-reference sdcc

即使在链接步骤中存在未定义的引用错误,小型设备C编译器(SDCC)也将生成ihx(Intel Hex)文件。在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文件。

1 个答案:

答案 0 :(得分:1)

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

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