将Makefile包含为make target的依赖项是不是一个坏主意?
例如
hello.o: hello.cxx Makefile
$(CXX) -c $(CFLAGS) $< -o $@
这样,只要修改了Makefile,就会重新编译目标。
答案 0 :(得分:2)
不,这不是一个坏主意。按照惯例,我们从不这样做,但是如果你有makefile调用其他makefile,那么包含它会是一个好主意。
答案 1 :(得分:0)
我相信当你修改Makefile时,你要做的就是运行clean(或其他等效目标)。
这可以实现。 (我在几个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。