Моя цель - сгенерировать файл (MyOut.elf) и, , если этот файл сгенерирован, сгенерируйте другие два файла (MyOut.s19 и size.txt), которые зависят от этот файл.make: .SECONDARY target breaks buld
Я совсем новичок в Makefiles, но я написал следующее:
.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
Вместо этого, если я uncomment Последняя строка .SECONDARY:
, цепь зависимостей кажется «сломанной», так как она останавливается после первой цели (MyOut.elf):
> del *.elf
> make
Building ELF: MyOut.elf
Finished building target: MyOut.elf
TARGET
Тогда, если я бегу сделать снова, зависимые файлы 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 директивы, так как это является частью Makefile автоматически генерируемым Eclipse)
Когда вы удаляете '* .elf', что произойдет, если вы также удалите два других файла из предыдущего запуска? – Kusalananda
@ Kusalananda: если я удалю все выходные файлы, все три будут правильно восстановлены. – Nova
...и если вы раскомментируете '.SECONDARY:', удалите файл 'elf' и запустите make, все будут перестроены? – Kusalananda