在Makefile中,.PHONY
是一个特殊的目标,用于告诉make
命令,无论当前目录下是否存在与.PHONY
目标同名的文件,都应当执行该目标对应的命令。这通常用于确保某些命令总是被执行,而不是因为文件系统中存在同名文件而被跳过。
.PHONY
目标的非假先决条件意味着该目标没有依赖项,或者其依赖项总是被认为是“过时”的,因此无论何时执行make
命令,都会运行与该.PHONY
目标关联的命令。
.PHONY
声明,可以清晰地表明哪些目标是伪目标,便于理解和维护。.PHONY
目标是一种特殊的伪目标。clean
目标)。test
目标)。docs
目标)。.PHONY: all clean test docs
all: program
program: main.o util.o
gcc -o program main.o util.o
main.o: main.c
gcc -c main.c
util.o: util.c
gcc -c util.c
clean:
rm -f program main.o util.o
test:
./run_tests.sh
docs:
doxygen Doxyfile
.PHONY
目标未被执行原因:
.PHONY
目标同名的文件,并且该文件是最新的(即没有依赖项比它更新)。make
命令的缓存机制导致的。解决方法:
.PHONY
目标同名的文件存在。make -B
(或make --always-make
)强制重新构建所有目标。.PHONY
目标的声明是否正确无误。通过上述方法,可以确保.PHONY
目标在需要时总是被执行,从而避免因文件系统状态而导致的意外行为。
领取专属 10元无门槛券
手把手带您无忧上云