代码之家  ›  专栏  ›  技术社区  ›  David Grayson

在链接步骤中在生成文件中使用SDCC时出现问题

  •  1
  • David Grayson  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   Chris Shaffer    14 年前

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

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

    推荐文章