1

将 Makefile 作为 make 目标的依赖项是不是一个坏主意?

例如。

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

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

4

2 回答 2

2

不,这不是一个坏主意。传统上我们从不这样做,但如果你有 makefile 调用其他 makefile 那么包含它会是一个好主意。

于 2013-01-30T12:07:32.910 回答
0

我相信您要做的就是在修改 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。

于 2013-01-31T02:46:17.717 回答