Makefile编译没有依赖项的好文件

时间:2018-01-10 10:33:00

标签: c++ makefile compilation dependencies

我的Makefile中存在依赖项问题。 编译没有问题,它完美地编译了良好的* .cc和* .hh,但不幸的是,它没有重新编译依赖项,因此可执行文件中没有更新。

这是我的makefile:

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++使用的标志有关,但我无法找到解决方案; 提前感谢您就此问题提供的帮助,

1 个答案:

答案 0 :(得分:2)

如果没有为生成的依赖项文件指定文件名,那么它将是${@:%.o=%.d}(编译器逻辑)。即您的依赖项文件位于$(OBJDIR)而不是./,而您的makefile是它们所在的位置。

两种替代解决方案:

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