文档章节

通过使用 gcc 编译选项 快速定位头文件路径,解决编译中的问题

老汉-憨憨
 老汉-憨憨
发布于 2017/03/29 18:01
字数 457
阅读 63
收藏 0

C / C++ 当项目过于庞大的时候经常会出现有些头文件有多份拷贝。

如下图所示:

有可能会出现 多份相同的头文件里面代码却不一致的情况

如果恰巧引用了这样的头文件,可能会导致编译错误,

比如:

A 目录下的   xx.h 有一个变量  h;

B 目录下的   xx.h  没有变量    h;

我们编译路径中可能引用的是 B 目录下面的 xx.h  就有可能 导致 访问不存在的变量 h 而导致编译问题。

那么怎么快速定位到我们引用的头文件的路径呢?

gcc  有相关编译选项 -MMD  或者 -MD

`-MD'
     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
     implied.  The driver determines FILE based on whether an `-o'
     option is given.  If it is, the driver uses its argument but with
     a suffix of `.d', otherwise it take the basename of the input file
     and applies a `.d' suffix.

     If `-MD' is used in conjunction with `-E', any `-o' switch is
     understood to specify the dependency output file (but *note -MF:
     dashMF.), but if used without `-E', each `-o' is understood to
     specify a target object file.

     Since `-E' is not implied, `-MD' can be used to generate a
     dependency output file as a side-effect of the compilation process.

`-MMD'
     Like `-MD' except mention only user header files, not system
     header files.

一般加在 我们 Makefile 文件的 gcc 的  FLAGS 里面,根据不同的变量自行修改便可.

在 执行 make 进行编译,会得到一个  xx.cpp  => xx.d 的文件。

用编辑器打开便可以看到完整的头文件路径:

从图中可以清晰的看到所使用的头文件的路径

是用的   application/share/webapp_frame/include/webapp_headinfo.h 

而不是   server/share/webapp_frame/include/webapp_headinfo.h 文件

这样可以便于快速定位和修复一些编译上面的问题。

© 著作权归作者所有

上一篇: 宏的使用
下一篇: 螺旋数组
老汉-憨憨
粉丝 19
博文 322
码字总数 68382
作品 0
深圳
程序员
私信 提问
Linux系统的头文件和库文件搜索路径

Include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。 当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib() 写在specs内的 后来用-D -I -L指定的 gcc环境变量设定(...

AlphaJay
2010/05/31
4.9K
0
Linux编译工具:gcc入门

1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。...

zjy900507
2018/05/09
0
0
Linux下gcc生成和使用静态库和动态库详解

一、基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的平台不同(主要是编...

lwaif
2018/01/13
78
0
linux下编译代码时的默认头文件路径

1 应用编程、驱动源代码中的头文件 1.1 应用编程中包含的头文件是应用层的头文件,是应用程序的编译器带来的 1.1.1 编译windows下的应用程序时 1)使用<>包含的头文件一般会先搜索-I选项后的...

qq_40334837
2018/05/06
0
0
[转]gcc及其选项详解

1.简介: gcc是gnu旗舰产品,目前基本上就是和unix捆绑在一起分发的。这个东西功能强大,但是有多达上千个选项,其用户手册也有将近一万行.虽然其中的多数选项平时很少用到.但是不管装软件还是写...

四彩
2016/02/28
35
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部