【发布时间】:2016-07-07 20:38:32
【问题描述】:
我的目标是生成一个文件 (MyOut.elf),如果生成了此文件,则生成其他两个依赖于该文件的文件(MyOut.s19 和 size.txt) .
我是 makefile 的新手,但我写了以下内容:
.DEFAULT_GOAL := full
full: MyOut.elf MyOut.s19 size.txt
@echo TARGET
# Tool invocations
MyOut.s19: MyOut.elf
@echo 'Building S19 : $@'
@echo 'MyOut.s19: MyOut.elf' > MyOut.s19
@echo 'Finished building target: $@'
@echo ' '
size.txt: MyOut.elf
@echo 'Building section size summary : $@'
@echo 'size.txt: MyOut.elf' > size.txt
@echo 'Finished building target: $@'
@echo ' '
all: MyOut.elf
MyOut.elf:
@echo 'Building ELF: $@'
@echo 'MyOut.elf' > MyOut.elf
@echo 'Finished building target: $@'
@echo ' '
.PHONY: full
#.SECONDARY:
现在,如果我运行 make,一切都会按预期运行:
> make
Building ELF: MyOut.elf
Finished building target: MyOut.elf
Building S19 : MyOut.s19
Finished building target: MyOut.s19
Building section size summary : size.txt
Finished building target: size.txt
TARGET
相反,如果我取消注释最后一行 .SECONDARY:,则依赖链似乎“断开”,因为它在第一个目标 (MyOut.elf) 之后停止:
> del *.elf
> make
Building ELF: MyOut.elf
Finished building target: MyOut.elf
TARGET
然后,如果我再次运行 make,将构建依赖文件 MyOut.s19 和 size.txt:
> make
Building S19 : MyOut.s19
Finished building target: MyOut.s19
Building section size summary : size.txt
Finished building target: size.txt
TARGET
所以,我的问题是:
- 为什么会这样?
- 如何解决这个问题? (注意:我无法删除 .SECONDARY 指令,因为这是 Eclipse 自动生成的 makefile 的一部分)
【问题讨论】:
-
当你删除
*.elf时,如果你也从之前的 make run 中删除了另外两个文件会发生什么? -
@Kusalananda:如果我删除所有输出文件,所有三个都将正确重建。
-
...如果你取消注释
.SECONDARY:,删除elf文件并运行make,所有的都重建了吗? -
@Kusalananda:是的,如第一个示例中所述。问题是(正如我提到的)我无法删除
.SECONDARY,因为这是一个自动生成的 makefile -
这对我来说看起来不对。我建议您在 bug-make@gnu.org 邮件列表中将其作为可能的错误提出。