为什么特殊目标.SECONDARY会抑制重建目标?

时间:2015-07-15 10:27:49

标签: makefile gnu-make

我有一个简单的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.otest.bin后,一切正常。但是,如果我在.SECONDARY: - 目标之后添加all: - 行,它似乎会破坏所有目标之间的依赖关系。例如,删除test.o将不会在重新运行make时重建它。

为什么会这样?在我的情况下.SECONDARY似乎不再需要独立重建中间目标(.o和.bin),无论依赖是否存在依赖。那可能没用,是吗?

1 个答案:

答案 0 :(得分:0)

来自GNU Makefile Special Built In Target Names:

没有先决条件的

.SECONDARY会导致所有目标都被视为辅助目标(即,没有目标被删除,因为它被视为中间目标)。

因此,在您的情况下,所有目标都将被视为intermediate files

依赖性的丢失很可能与以下两行有关,取自Chains of Implicit Rules

通常,如果文件在makefile中被提及为目标或先决条件,则文件不能是中间文件。

当文件是辅助文件时,make不会仅因为它尚不存在而创建文件,但make不会自动删除该文件。将文件标记为辅助文件也将其标记为中间文件。