以下 makefile 命令的作用是什么? /无符号控制文件
What does the following makefile command do? /no-symbols-control-file
我在 makefile 中看到了以下命令:
%-nosyms.$(TARGET).elf: %.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a
$(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)
来源:Contiki/cpu/arm/stm32f103/Makefile.stm32f103 .
此命令是否生成无符号控制文件?没有符号的图片文件有什么用?
逐条分析:
Makefile 的目标是:
%-nosyms.$(TARGET).elf
先决条件列表为:
%.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a
目标配方是:
$(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)
Makefile 的逻辑是:
如果 *-nosyms.$(TARGET).elf
文件存在,将文件的时间戳与 所有 其先决条件的时间戳进行比较。如果任何先决条件更新,则重建此文件(即 运行 给定的配方)。如果目标被标记为.PHONY
)(似乎不是这样),不检查时间戳就重建。
否则,转到每个先决条件配方并一个一个执行(或者并行执行,如果 -j
选项提供给 make
):
%.co
$(PROJECT_OBJECTFILES)
$(INTERRUPT_OBJECTFILES)
contiki-$(TARGET).a
然后,通过调用处理当前目标的配方:
$(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)
其中:
$@
:当前目标的名称(即*-nosyms.$(TARGET).elf
)
$^
:先决条件列表(即%.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a
)
$(filter-out %.a,$^)
:先决条件列表中的非 *.a
文件。
$(filter %.a,$^)
:先决条件列表中的 *.a
个文件。
我在 makefile 中看到了以下命令:
%-nosyms.$(TARGET).elf: %.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a
$(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)
来源:Contiki/cpu/arm/stm32f103/Makefile.stm32f103 .
此命令是否生成无符号控制文件?没有符号的图片文件有什么用?
逐条分析:
Makefile 的目标是:
%-nosyms.$(TARGET).elf
先决条件列表为:
%.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a
目标配方是:
$(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)
Makefile 的逻辑是:
如果
*-nosyms.$(TARGET).elf
文件存在,将文件的时间戳与 所有 其先决条件的时间戳进行比较。如果任何先决条件更新,则重建此文件(即 运行 给定的配方)。如果目标被标记为.PHONY
)(似乎不是这样),不检查时间戳就重建。否则,转到每个先决条件配方并一个一个执行(或者并行执行,如果
-j
选项提供给make
):%.co
$(PROJECT_OBJECTFILES)
$(INTERRUPT_OBJECTFILES)
contiki-$(TARGET).a
然后,通过调用处理当前目标的配方:
$(CC) $(CFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(filter %.a,$^) $(LDFLAGS)
其中:
$@
:当前目标的名称(即*-nosyms.$(TARGET).elf
)$^
:先决条件列表(即%.co $(PROJECT_OBJECTFILES) $(INTERRUPT_OBJECTFILES) contiki-$(TARGET).a
)$(filter-out %.a,$^)
:先决条件列表中的非*.a
文件。$(filter %.a,$^)
:先决条件列表中的*.a
个文件。