考虑以下Makefile:
# <include global configuration Makefile>
INCL = -I../include \
-I<whatever>
CPPFLAGS=$(DEFS) $(INCL)
CXXFLAGS = -O0 -g -Wall -fmessage-length=0
SRCS = $(wildcard *.cpp)
OBJS = $(SRCS:.cpp=.o)
all: $(OBJS)
%.o: %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
depend: .depend
.depend: $(SRCS)
$(CPP) $(CPPFLAGS) -M $^ > $@
clean:
rm -f $(OBJS)
rm .depend
-include .depend
此Makefile使用#include
命令创建g++ -M
依赖关系链,并包含它。这可能是一个相当漫长的过程。问题是,即使调用make clean
,也会生成此文件,无论如何都会删除此文件。是否有条件地包含此文件,如果运行干净目标,则不打扰创建它?
答案 0 :(得分:12)
这样的事情:
ifneq ($(MAKECMDGOALS),clean)
-include .depend
endif
有关详细信息,请参阅make manual page on Goals
编辑:-include
不能缩进制表符,否则会被忽略。
答案 1 :(得分:1)
您可以在编译期间为 free (即,无运行时成本)执行此类依赖性。运行clean
时,依赖项自然不会重新生成。请参阅Paul Smith的Advanced Auto-Dependency Generation文章中的组合编译和依赖关系生成部分。