C++ Makefile编译没有依赖项的好文件
我的Makefile中的依赖项有问题。 编译没有问题,它完美地编译了好的*.cc和*.hh,但不幸的是,它没有重新编译依赖项,因此在可执行文件中没有更新 这是我的makefile:C++ Makefile编译没有依赖项的好文件,c++,makefile,compilation,dependencies,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+
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 $@ $<
EXEC?=程序
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查找-类型d))
##廉洁的规则
.假冒:干净
清洁:
rm-rf$(OBJDIR)
rm-f$(执行)
$(执行):$(OBJS)
@回显“链接:$@”
$(CXX)$(OBJS)-o$@
-包括美元(DEP)
$(OBJDIR)/%.o:./%.cc./%.hh
@mkdir-p$(@D)
@echo“Compiling:$如果您没有为生成的依赖项文件指定文件名,它将是${@:%.o=%.d}
(编译器逻辑)。也就是说,您的依赖项文件位于$(OBJDIR)
中,而不是位于makefile期望的//code>中
两种备选解决方案:
DEP:=$(OBJS:%.o=%.d)
@$(CXX)-c$(CFLAGS)-MT$@-MMD-MP-MF$(如果不指定生成的依赖项文件的文件名,它将是${@:%.o=%.d}
(编译器逻辑)。也就是说,依赖项文件位于$(OBJDIR)
中,而不是makefile所期望的//code>中
两种备选解决方案:
DEP:=$(OBJS:%.o=%.d)
@$(CXX)-c$(CFLAGS)-MT$@-MMD-MP-MF$(你有DEP
作为CSRC
的一个函数——我想它实际上应该是SRCS
?是的,对不起。我只是简化了实际的生成文件,忘了编辑这一行。你有DEP
作为CSRC
的函数——我想它实际上应该是SRCS
?是的,对不起。我只是简化了实际的代码。)Makefile和我忘了编辑这一行。非常感谢你的回答,我使用了第一个,它解决了问题:)。非常感谢你的回答,我使用了第一个,它解决了问题:)。