2010-07-22 50 views
1

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

有没有办法告诉SDCC抑制ihx输出链接期间有一个未定义的参考?如果不是,什么是最好的解决方法?(我已经想到了一个)。

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

这里的问题的一个例子:

您有一个名为test.c的文件,该文件调用一个未定义功能:

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

你有一个简单的Makefile从构建test.ihx test.c的:

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. 

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

回答

1

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

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

+0

酷,这种解决方法听起来比我的好。 – 2010-07-22 20:45:43