Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Makefile编译没有依赖项的好文件_C++_Makefile_Compilation_Dependencies - Fatal编程技术网

C++ 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+

我的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 $@ $<
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和我忘了编辑这一行。非常感谢你的回答,我使用了第一个,它解决了问题:)。非常感谢你的回答,我使用了第一个,它解决了问题:)。