Makefile 为什么特殊目标。次要目标会禁止重建目标?

Makefile 为什么特殊目标。次要目标会禁止重建目标?,makefile,gnu-make,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.o或test.bin时,一切正常。但是,如果我在all:-目标之后添加一个.SECONDARY:-行,似乎会打破所有目标之间的依赖关系。例如,删除test.o不会使其在

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

为什么会这样?在我的例子中,.SECONDARY似乎消除了独立重建中间目标.o和.bin的需要,无论依赖项是否不再存在。那不会有用吧?

来自

.没有先决条件的次要目标会导致将所有目标视为次要目标,即不会删除任何目标,因为它被视为中间目标

因此,在您的情况下,所有目标都将被视为中间文件

依赖关系的丢失很可能与以下两行有关,取自:

通常,如果在makefile中提到某个文件作为目标或先决条件,则该文件不能是中间文件

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