为gcc生成依赖项

为gcc生成依赖项,gcc,makefile,dependencies,Gcc,Makefile,Dependencies,我正在编写一个Makefile来编译一个很长的项目。 基本上,我已经定义了我需要的所有对象。 当我需要生成依赖项时,问题就出现了。 我在做这样的事情: a.o: $( $(CXX) -MM $(INCLUDE) A/a.cpp | sed 's/a.o: //') $(CXX) $(CXXFLAGS) $(INCLUDES) A/a.cpp b.o: $( $(CXX) -MM $(INCLUDE) A/b.cpp | sed 's/b.o: //') $(CXX) $(CXXFLAGS)

我正在编写一个Makefile来编译一个很长的项目。 基本上,我已经定义了我需要的所有对象。 当我需要生成依赖项时,问题就出现了。 我在做这样的事情:

a.o: $( $(CXX) -MM $(INCLUDE) A/a.cpp | sed 's/a.o: //')
 $(CXX) $(CXXFLAGS) $(INCLUDES) A/a.cpp

b.o: $( $(CXX) -MM $(INCLUDE) A/b.cpp | sed 's/b.o: //')
 $(CXX) $(CXXFLAGS) $(INCLUDES) A/b.cpp

libab.a: a.o b.o
 $(LXX) $(LXXFLAGS) libab.a a.o b.o
$(CXX)-MM$(INCLUDE)A/A.cpp|sed's/A.o://'
的输出列出了A.cpp需要编译的所有依赖项,因此我试图在声明对象但它不工作时将此命令的输出与依赖项一样

你知道怎么做吗


谢谢。

为什么您要删除目标前缀,而这正是您手动键入的前缀

而是只包含整个依赖项文件

-include $(ALL_CPP_FILES:%.cpp=%.d)
自动生成
.d
(依赖项)文件的常用标志是:

CPPFLAGS+=-MMD    # automatic .d dependency file generation
这类似于
-MD
,只是它只提到用户头文件,而不是系统头文件

样本:

#构建=发布
PRJNAME=demo
#
目标+=箱/测试
建造:\
美元(目标)\
标签
全部:构建
清洁:
rm-rf bin/*$(所有对象文件)
rm-rf$(所有文件:%.CPP=%.d)
##############################
#定义
CC=gcc
CXX=g++
CPPFLAGS+=-MMD#自动生成.d依赖项文件
CPPFLAGS+=-std=c++11
ifeq($(构建),发布)
CPPFLAGS+=-g-O3
CPPFLAGS+=-march=本地
其他的
CPPFLAGS+=-g-O0
CPPFLAGS+=-DDEBUG-D_调试
CPPFLAGS+=-DUNIT_测试
恩迪夫
CPPFLAGS+=-Wall-Wextra-pedantic
#CPPFLAGS+=-Werror
LDFLAGS+=-lpthread
所有_CPP_文件=A/A.CPP A/b.CPP
所有对象文件=$(patsubst%.cpp、%.o、$(所有对象文件))
##############################
标记:$(所有文件)
ctags-ra/
%.o:%.cpp
$(CXX)-c$(CPPFLAGS)$<-o$@
##############################
#工具目标
bin/test:$(所有对象文件)
mkdir-pv$(@D)
$(CXX)$^$(LDFLAGS)-o$@
.PRECIOUS:S(所有对象文件)
.冒牌货:清洁所有建筑
-包括$(所有文件:%.CPP=%.d)