我的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++
使用的标志有关,但我无法找到解决方案;
提前感谢您就此问题提供的帮助,
答案 0 :(得分:2)
如果没有为生成的依赖项文件指定文件名,那么它将是${@:%.o=%.d}
(编译器逻辑)。即您的依赖项文件位于$(OBJDIR)
而不是./
,而您的makefile是它们所在的位置。
两种替代解决方案:
DEP := $(OBJS:%.o=%.d)
。@$(CXX) -c $(CFLAGS) -MT $@ -MMD -MP -MF $(<:%.cc=%.d) -o $@ $<