2010-07-22 81 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