【问题标题】:Makefile compiling the good files without the dependenciesMakefile 编译没有依赖关系的好文件
【发布时间】:2018-06-19 12:03:35
【问题描述】:

我的 Makefile 中的依赖项有问题。 编译没有问题,可以完美编译好的*.cc和*.hh,可惜没有重新编译依赖,所以可执行文件没有更新。

这是我的生成文件:

EXEC      ?= program

SRCS      = $(shell find -name *.cc)
DEP       = $(SRCS:.cc=.d)

OBJDIR    = objs
OBJS     = $(SRCS:./%.cc=$(OBJDIR)/%.o)

CXX       = g++
CFLAGS    = -std=c++14 $(addprefix "-I", $(shell find -type d))

## Clean rule
.PHONY: clean
clean:
    rm -rf $(OBJDIR)
    rm -f $(EXEC)

$(EXEC) : $(OBJS)
    @echo "Linking: $@"
    $(CXX) $(OBJS) -o $@

-include $(DEP)

$(OBJDIR)/%.o : ./%.cc ./%.hh
    @mkdir -p $(@D)
    @echo "Compiling: $<"
    @$(CXX) -c $(CFLAGS) -MT $@ -MMD -MP -o $@ $<

这可能与g++ 使用的标志有关,但我无法找到解决方案; 提前感谢您在此问题上提供的帮助,

【问题讨论】:

  • 你有DEP 作为CSRC 的函数——我想它实际上应该是SRCS
  • 是的,对不起。我只是简化了实际的 Makefile,我忘了编辑这一行。

标签: c++ makefile compilation dependencies


【解决方案1】:

如果你不为生成的依赖文件指定文件名,它将是${@:%.o=%.d}(编译器逻辑)。 IE。您的依赖文件在 $(OBJDIR) 中,而不是在您的 makefile 所期望的 ./ 中。

两种替代解决方案:

  1. DEP := $(OBJS:%.o=%.d)
  2. @$(CXX) -c $(CFLAGS) -MT $@ -MMD -MP -MF $(&lt;:%.cc=%.d) -o $@ $&lt;

【讨论】:

  • 非常感谢您的回答,我使用了第一个,它解决了问题:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2023-04-06
  • 2014-05-07
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多