【问题标题】:How to conditionally include a file into Makefile?如何有条件地将文件包含到 Makefile 中?
【发布时间】:2011-06-19 08:36:07
【问题描述】:

考虑以下 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 使用 g++ -M 命令创建一个 #include 依赖链,并包含它。这可能是一个相当长的过程。问题是即使调用make clean 也会生成此文件,但无论如何都会删除此文件。有没有办法有条件地包含这个文件,如果运行干净的目标就不用费心创建它?

【问题讨论】:

标签: c++ makefile


【解决方案1】:

类似这样的:

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

查看make manual page on Goals了解更多信息

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-24
      • 2012-03-15
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2014-02-26
      • 2013-09-17
      • 2016-08-10
      相关资源
      最近更新 更多