【问题标题】:Adding a dependencie to a rule without appending the dependency to the total list将依赖项添加到规则而不将依赖项附加到总列表
【发布时间】:2014-12-29 12:53:02
【问题描述】:

我正在为嵌入式系统开发,这意味着我必须使用链接器脚本。这没什么大不了的。我从以下 Make 规则开始将所有内容链接在一起:

$(RELEASETARGET) : $(OFILES)
    $(LD) -Tlinker_script.ld --entry ResetISR --gc-sections $(LIBDIR) -o $@ $^ $(LIB)

如你所见,这一行包含一个错误:linker_script.ld 是此规则的依赖项,但在依赖项中并未提及。但如果我只是将它添加到 deps 的末尾:

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

它也会在 -o 之后添加到列表中,并且程序将无法在设备上运行。

这些警告都不是有害的,但我喜欢没有它们。顺便说一句,不能简单地删除 -Tlinker_script.ld 部分,只将脚本添加到依赖项列表中:那么配置将无法正确加载,程序将无法在设备上运行。

那么,如何在不将其添加到 .o 文件列表的情况下添加此依赖项?

【问题讨论】:

  • 为什么不用$(OFILES) 代替$^

标签: linker makefile dependencies


【解决方案1】:

正如@Banthar 提到的,最简单的解决方案是使用$(OFILES)。如果您不想这样做,可以使用filter 仅返回目标文件:

$(LD) ... -o $@ $(filter %.o,$^) $(LIB)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多