我的目标是生成一个文件(MyOut.elf)和,如果这个文件生成,生成其他两个文件(MyOut.s19和size.txt)依赖于该文件。make:.SECONDARY目标打破buld
我在makefile文件相当多的新手,但我写了下面:
.DEFAULT_GOAL := full
full: MyOut.elf MyOut.s19 size.txt
@echo TARGET
# Tool invocations
MyOut.s19: MyOut.elf
@echo 'Building S19 : [email protected]'
@echo 'MyOut.s19: MyOut.elf' > MyOut.s19
@echo 'Finished building target: [email protected]'
@echo ' '
size.txt: MyOut.elf
@echo 'Building section size summary : [email protected]'
@echo 'size.txt: MyOut.elf' > size.txt
@echo 'Finished building target: [email protected]'
@echo ' '
all: MyOut.elf
MyOut.elf:
@echo 'Building ELF: [email protected]'
@echo 'MyOut.elf' > MyOut.elf
@echo 'Finished building target: [email protected]'
@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将自动生成的生成文件的一部分)
当您删除'* .elf'时,如果您还从前一个make run中删除了另外两个文件,会发生什么? – Kusalananda
@Kusalananda:如果我删除所有的输出文件,所有三个都正确重建。 – Nova
...如果你取消注释'.SECONDARY:',删除'elf'文件并运行make,全部都被重建? – Kusalananda