2014-11-02 78 views
0

我正在爲嵌入式系統開發,這意味着我必須使用鏈接器腳本。這沒什麼大不了的。我開始用下面的創建規則的一切聯繫在一起:在規則中添加一個依賴關係而不會將依賴關係附加到總列表中

$(RELEASETARGET) : $(OFILES) 
    $(LD) -Tlinker_script.ld --entry ResetISR --gc-sections $(LIBDIR) -o [email protected] $^ $(LIB) 

正如你可以看到這行包含一個錯誤:linker_script.ld是這個規則的依賴,但它不是在依賴提及。但是,如果我只是把它添加到DEPS結束:

$(RELEASETARGET) : $(OFILES) linker_script.ld 
    $(LD) -Tlinker_script.ld --entry ResetISR --gc-sections $(LIBDIR) -o [email protected] $^ $(LIB) 

它也被-o後添加到列表,程序將無法在設備上運行。

這些警告都不是有害的,但我喜歡沒有它們的生活。這是不可能的,只是刪除-Tlinker_script.ld部分,只將腳本添加到依賴關係列表:然後配置將不會正確加載,程序將無法在設備上運行。

那麼,如何添加此依賴項而不將其添加到.o-files列表中呢?

+1

爲什麼不直接使用'$(OFILES)'代替'$ ^'? – 2014-11-02 21:40:01

回答

0

最簡單的解決方案是使用$(OFILES),如@Banthar所述。如果你不想這樣做,你可以使用filter只返回對象文件:

$(LD) ... -o [email protected] $(filter %.o,$^) $(LIB)