下面的makefile命令做什么/无符号控制文件

下面的makefile命令做什么/无符号控制文件,makefile,gnu-make,binaryfiles,contiki,Makefile,Gnu Make,Binaryfiles,Contiki,我在生成文件中跨以下命令进行cam: %-nosyms.$(TARGET).elf: %.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a $(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS) 资料来源: 此命令是否不生成符号控制文件?无符号图像文件的用途是什么?逐件分析: 生成文件

我在生成文件中跨以下命令进行cam:

%-nosyms.$(TARGET).elf: %.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a
$(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)
资料来源:


此命令是否不生成符号控制文件?无符号图像文件的用途是什么?

逐件分析:

生成文件的目标是:

%-nosyms.$(TARGET).elf

先决条件清单如下:

%.co$(项目对象文件)$(中断对象文件)contiki-$(目标).a

目标配方是:

Makefile的逻辑是:

  • 如果存在
    *-nosyms.$(TARGET).elf
    文件,请将该文件的时间戳与其所有先决条件的时间戳进行比较。如果任何先决条件较新,则重新生成此文件(即运行给定配方)。如果目标标记为(似乎不是这样),则在不检查时间戳的情况下重建

  • 否则,转到每个先决条件配方并逐个执行(如果
    -j
    选项提供给
    make
    ,则并行执行):

    • %.co
    • $(项目对象文件)
    • $(中断对象文件)
    • contiki-$(目标)。a
  • 然后,通过调用以下命令来处理当前目标的配方:

  • $(CC)$(CFLAGS)-o$@$(过滤掉%.a,$^)$(过滤%.a,$^)$(过滤%.a,$^)$(LDFLAGS)

    其中:

    • $@
      :当前目标的名称(即
      *-nosyms.$(target).elf
    • $^
      :先决条件列表(即
      %.co$(项目对象文件)$(中断对象文件)contiki-$(目标)。a
    • $(过滤掉%.a,$^)
      :先决条件列表中的非-
      *.a
      文件
    • $(过滤器%.a,$^)
      :必备列表中的
      *.a
      文件

    什么是
    $(过滤掉%.a,$^)$(过滤%.a,$^)$(过滤%.a,$^)
    做什么?@darthpeedious:查看更新的答案。
    filter
    filter out
    函数的目的是创建一个排序列表,从非
    *.a
    文件开始,以
    *.a
    文件结束。尽管如此,我认为没有理由使用
    $(filter%.a,$^)
    两次。我已经添加了源代码(以防您感兴趣)
    .a
    文件是归档文件,对吗?生成的映像将没有库,是吗?好的,因此有两个可执行的ELF映像。不带
    nosyms
    的适用于调试和测试。带有
    nosyms
    的版本应适合发布(无调试符号)。
    nosyms
    版本的大小也应该更小。基本上,与
    nosyms
    版本相比,调试映像(较大的一个)应该启用
    -g
    编译器标志。
    $(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)