我有一个简单的Makefile:
all: bootloader.bin
test.bin: test.o
touch test.bin
bootloader.bin: test.bin
touch bootloader.bin
test.o: test.c
touch test.o
删除test.o
或test.bin
后,一切正常。但是,如果我在.SECONDARY:
- 目标之后添加all:
- 行,它似乎会破坏所有目标之间的依赖关系。例如,删除test.o将不会在重新运行make时重建它。
为什么会这样?在我的情况下.SECONDARY似乎不再需要独立重建中间目标(.o和.bin),无论依赖是否存在依赖。那可能没用,是吗?
答案 0 :(得分:0)
来自GNU Makefile Special Built In Target Names:
没有先决条件的.SECONDARY会导致所有目标都被视为辅助目标(即,没有目标被删除,因为它被视为中间目标)。
因此,在您的情况下,所有目标都将被视为intermediate files
。
依赖性的丢失很可能与以下两行有关,取自Chains of Implicit Rules:
通常,如果文件在makefile中被提及为目标或先决条件,则文件不能是中间文件。
当文件是辅助文件时,make不会仅因为它尚不存在而创建文件,但make不会自动删除该文件。将文件标记为辅助文件也将其标记为中间文件。