谁能给我解释一下这个食谱吗? $(Q)makeDependent$(CFLAGS)-o.o-f-$nul:| sed-es$($(@:.o=.d)

谁能给我解释一下这个食谱吗? $(Q)makeDependent$(CFLAGS)-o.o-f-$nul:| sed-es$($(@:.o=.d),sed,makefile,Sed,Makefile,它是contiki makefile中以下规则的一部分 $(Q)makedepend $(CFLAGS) -o.o -f- $< 2> nul: | sed -e s!$(<:.cpp=.o)!$@! -e s!\\!/!g > $(@:.o=.d) CUSTOM_RULE_CPP_TO_OBJECTDIR_O=1 $(OBJECTDIR)/%.o:%.cpp |$(OBJECTDIR) $(跟踪抄送) $(Q)cl-nologo$(VCFLAGS)-c$

它是contiki makefile中以下规则的一部分

$(Q)makedepend $(CFLAGS) -o.o -f- $< 2> nul: | sed -e s!$(<:.cpp=.o)!$@! -e s!\\!/!g > $(@:.o=.d)
CUSTOM_RULE_CPP_TO_OBJECTDIR_O=1
$(OBJECTDIR)/%.o:%.cpp |$(OBJECTDIR)
$(跟踪抄送)
$(Q)cl-nologo$(VCFLAGS)-c$<-Fo$@
$(Q)makeDependent$(CFLAGS)-o.o-f-$<2>num:| sed-es!$($(@:.o=.d)

如果你想在投票前了解更多信息,请告诉我。谢谢。我不确定你到底想解释什么。这是一个命令行,它调用
makedepend
程序,将其stderr重定向到
nul:
(看起来这应该在DOS系统上运行?但使用像sed这样的UNIX工具?)并将其输出发送到
sed
sed
程序正在将makeDependent输出中的
.o
文件名转换为实际目标名称(包括路径),并将反斜杠转换为正斜杠

然后将结果写入一个
.d
文件。您可能会在makefile的某个地方找到一行,该行使用
include
来包含所有
.d
文件

基本上,这是一种自动生成头文件依赖项的方法,这样make就可以在对象文件发生更改时重建它们,而无需手动将它们全部写入makefile

埃塔

  • $(Q)
    make变量引用,可能扩展为
    @
    或不扩展,以控制makefile的详细程度

  • makedependen$(CFLAGS)-o.o-f-$我理解这一点,谢谢你,但是你能不能打断这个陈述,解释一下哪个部分在做什么?
    CUSTOM_RULE_CPP_TO_OBJECTDIR_O = 1
    $(OBJECTDIR)/%.o: %.cpp | $(OBJECTDIR)
        $(TRACE_CC)
        $(Q)cl -nologo $(VCFLAGS) -c $< -Fo$@
        $(Q)makedepend $(CFLAGS) -o.o -f- $< 2> nul: | sed -e s!$(<:.cpp=.o)!$@! -e s!\\!/!g > $(@:.o=.d)