Makefile作为make目标的依赖项

时间:2013-01-30 10:27:16

标签: makefile

将Makefile包含为make target的依赖项是不是一个坏主意?

例如

hello.o: hello.cxx Makefile
    $(CXX) -c  $(CFLAGS) $< -o $@

这样,只要修改了Makefile,就会重新编译目标。

2 个答案:

答案 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。