将 Makefile 作为 make 目标的依赖项是不是一个坏主意?
例如。
hello.o: hello.cxx Makefile
$(CXX) -c $(CFLAGS) $< -o $@
这样,只要修改了 Makefile,就会重新编译目标。
将 Makefile 作为 make 目标的依赖项是不是一个坏主意?
例如。
hello.o: hello.cxx Makefile
$(CXX) -c $(CFLAGS) $< -o $@
这样,只要修改了 Makefile,就会重新编译目标。
不,这不是一个坏主意。传统上我们从不这样做,但如果你有 makefile 调用其他 makefile 那么包含它会是一个好主意。
我相信您要做的就是在修改 Makefile 时运行干净(或其他等效目标)。
可以这样实现。(我一直在我的几个 C/C++ 项目中使用这个配方)。
CLEANUP_TRIGGER := .makefile
BASE_MAKEFILE := $(firstword $(MAKEFILE_LIST))
FINAL_TARGET := hello.o
all: $(CLEANUP_TRIGGER) $(FINAL_TARGET)
hello.o : hello.c
$(CXX) -c $(CFLAGS) $< -o $@
$(CLEANUP_TRIGGER): $(BASE_MAKEFILE)
if [ -f $(CLEANUP_TRIGGER) ]; then $(MAKE) clean; fi
touch $@
clean:
rm -rf *.o
rm -f $(CLEANUP_TRIGGER)
.PHONY: all clean
本质是确保 CLEANUP_TRIGGER 是通常被调用的规则的一部分,只要 Makefile 比 CLEANUP_TRIGGER 更新,就运行 make clean。