2014-11-02 80 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)