如何有条件地将文件包含到Makefile中?

时间:2011-02-01 15:20:18

标签: c++ makefile

考虑以下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,也会生成此文件,无论如何都会删除此文件。是否有条件地包含此文件,如果运行干净目标,则不打扰创建它?

2 个答案:

答案 0 :(得分:12)

这样的事情:

ifneq ($(MAKECMDGOALS),clean)
-include .depend
endif

有关详细信息,请参阅make manual page on Goals

编辑:-include不能缩进制表符,否则会被忽略。

答案 1 :(得分:1)

您可以在编译期间为 free (即,无运行时成本)执行此类依赖性。运行clean时,依赖项自然不会重新生成。请参阅Paul Smith的Advanced Auto-Dependency Generation文章中的组合编译和依赖关系生成部分。