为gcc生成依赖项

蝴蝶结

我正在编写一个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: //'list的输出列出了a.cpp需要编译的所有依赖项,因此当我声明对象但它无法正常工作时,我试图像依赖项一样放置此命令的输出。

您有关于如何操作的想法吗?

谢谢。

为什么要尝试删除与您已经手动输入的目标前缀完全相同的目标前缀?

而是只包括整个依赖文件。

-include $(ALL_CPP_FILES:%.cpp=%.d)

自动生成.d(依赖)文件的常用标志是:

CPPFLAGS+=-MMD    # automatic .d dependency file generation

就像一样-MD,除了它只提到用户头文件,没有提到系统头文件。

样本:

# BUILD=RELEASE

PRJNAME=demo
#
TARGETS+=bin/test

build: \
    $(TARGETS) \
    tags

all: build

clean:
    rm -rf bin/* $(ALL_OBJ_FILES)
    rm -rf $(ALL_CPP_FILES:%.cpp=%.d)

##############################
# definition
CC=gcc
CXX=g++

CPPFLAGS+=-MMD    # automatic .d dependency file generation
CPPFLAGS+=-std=c++11

ifeq ($(BUILD),RELEASE)
    CPPFLAGS+=-g -O3
    CPPFLAGS+=-march=native
else
    CPPFLAGS+=-g -O0
    CPPFLAGS+=-DDEBUG -D_DEBUG
    CPPFLAGS+=-DUNIT_TESTS
endif

CPPFLAGS+=-Wall -Wextra -pedantic
#CPPFLAGS+=-Werror

LDFLAGS+=-lpthread

ALL_CPP_FILES=A/a.cpp A/b.cpp
ALL_OBJ_FILES=$(patsubst %.cpp,%.o,$(ALL_CPP_FILES))

##############################
tags: $(ALL_CPP_FILES)
    ctags -R A/

%.o: %.cpp
    $(CXX) -c $(CPPFLAGS) $< -o $@

##############################
# tool targets
bin/test: $(ALL_OBJ_FILES)
    mkdir -pv $(@D)
    $(CXX) $^ $(LDFLAGS) -o $@

.PRECIOUS: S(ALL_OBJ_FILES)
.PHONY: clean all build

-include $(ALL_CPP_FILES:%.cpp=%.d)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 gcc 自动生成依赖项

生成具有完整路径的gcc依赖项

使忽略生成的依赖项

为依赖项的依赖项设置rpath?

GCC 在正确的目录中为生成的头文件创建依赖项

用GCC和GNU自动生成依赖项有什么用?

节俭生成python依赖项

使用Spring Boot和Spring JPA时-为什么无法为依赖项的实体生成架构?

为具有jar依赖项的程序包生成Javadoc

Haskell Cabal + Nix:为项目中的所有依赖项生成本地文档

纱线是否为依赖项的依赖项固定特定版本?

如何处理gcc自动生成的标头依赖项中从C到C ++的源代码移动?

如何在GCC为C ++ 03的CentOS 6上部署C ++ 11程序(具有依赖项)?

CDI:注入依赖项生成的 bean

生成C ++ XPCOM依赖项错误

从节点模块自动生成Require依赖项

生成依赖项片段文件任务失败

为 OpenCv 添加模块依赖项的问题

为SQL Server设置Maven依赖项

依赖项注入DbContext始终为null

为SBT依赖项设置Javac选项

依赖项解析为不兼容的版本

为XBMC插件添加python依赖项

在.Net Core中将依赖项解析为父项

导致apt-get无法安装gcc / g ++的依赖项

为什么 IntelliJ 不将 maven 依赖项显示为外部依赖项,并且即使下载了依赖项也显示红色符号

如何生成捆绑了内部依赖项和外部依赖项作为外部jar的jar?

Maven强制仅针对特定的依赖项进行更新(对于选定的依赖项,为mvn -U)

如何在Maven中为我的一个依赖项指定某些依赖项版本