Cygwin GCC 的 Makefile 工程在 Eclipse CDT 中配置符号与路径自动发现方法

来源:互联网 发布:stl源码剖析 侯捷 pdf 编辑:程序博客网 时间:2024/05/17 02:07

首先使用 MinGW GCC 工具集的工程不存在这个问题:

CDT 可以很好的发现安装的 MinGW 工具集,然后使 MinGW GCC 的 Toolchain 激活,使其在新建 C/C++ 工程时成为可选的,这样就可以使用 CDT 自己的生成器产生 makefile。符号与路径自动发现没有问题,源码符号索引(source index)也没有问题。

符号与路径自动发现:指的是 C/C++ 程序中根据编译环境的差异,会在几个缺省的路径下查找 .h 文件和库文件,通常标准/RT 库的头文件和库文件就放到那里,所以源码中用 #include <stdio.h> 就可以直接找到并包含指定的头文件,不用指定标准头文件 stdio.h 的路径。另外,编译器会产生内置的宏符号,比如 C++ 编译器通常都产生 __cplusplus 宏,内置宏的定义和具体的编译器关系很大,比如,Cygwin GCC 就有 __CYGWIN__、__GNUC__ 等标识自己编译环境的宏。

而 Cygwin GCC 的问题恰恰出现在这里,CDT 不能发现 Cygwin 工具集的安装,这跟版本有关:早期的 Cygwin 也能被 CDT 自动发现,并激活 Cygwin GCC 的 Toolchain 选项。可是我用的 Cygwin setup 2.680,已经不能被 CDT(Eclipse 3.4.1,CDT 5.0.1)自动发现了。Cygwin 版本变化对安装设置最明显的改变是:变动了标识 Cygwin 安装的注册表键,而 CDT 就是靠注册表来发现 Cygwin、MinGW 等工具集的安装的。从这个 nabble.com 上的帖子可以看出点端倪。

我也不想搞注册表了,只好做 Makefile 类型的 CDT 工程,手头上还有些自己以前写的 makefile,改改就能用,工程在大一点就用 autotools 得了。

哪曾知要让 Makefile 型工程也能使用 CDT 的符号索引,也要费劲脑汁配置一番。

原因还是上面的问题,CDT 不知道 Cygwin 的存在,所以像 #include <stdio.h> 这句在建立符号索引时就会错(CDT 会表现出波浪的下滑线,并说明:unresolved inclusion),因为 CDT 找不到 stdio.h,看看生成过程中符号与路径自动发现的结果,在工程 Properties→C/C++ General→Paths and Symbols 中,就明白了——什么缺省 include 路径和内置宏都没发现(勾选 Show built-in values)。

当然 CDT 的符号索引和编译生成过程无关,Cygwin GCC 正常编译、生成程序,只是在编辑时 CDT 的源码浏览功能削弱了,原本强悍的源码符号索引 IDE 现在只成了一个高亮语法显示工具。

几经折腾后,发现了配置 Makefile 型工程使用 CDT 符号与路径自动发现的方法,步骤如下:

  1. 工程 Properties→C/C++ Build→Discovery Options 中设置 Discovery profiles scope 为 Configuration-wide(如果没有就新建这个),注意把下面配置中的 Automate discovery of paths and symbols 勾上,这个就影响工程 Properties 中的 C/C++ General→Paths and Symbols 中的 include 路径和宏符号的自动发现。

  2. 把 Discovery profile 选择为 GCC per project scanner info profile,和它平行的是很多 Managed Build System 前缀的 profile。

    Managed Build System 的 profile 对应于 CDT 内建的 make 生成器(叫做 CDT Internal Builder)使用的路径/符号自动发现设置。而使用 Cygwin 提供的外部 make 工具的方式称为:Gnu Make Builder,这两种 builder(生成器)在工程 Properties→C/C++ Build→Tool Chain Editor 能找到线索。

  3. 特别注意:如果你在 Discovery Options 中把 Compiler invocation command 设置为 gcc 或 g++,可能会出错,而这是 CDT 帮你填的默认编译命令(黑线……),原因是 Cygwin 中 gcc 和 g++ 可能是个符号链接,只有用 Cygwin 系统/库构造起来的程序才认识到这是个符号链接,否则 Windows 的程序,包括 CDT 就只当它是个文本文件(用 16 进制编辑器看看 Cygwin 的 ln 创建的符号链接文件的内容就明白了),此时把一个文本文件当程序运行当然会出错。解决办法就是找到 gcc/g++ 符号链接指向的实际目标编译器程序,通常是 gcc-4.exe、g++-4.exe 等(4 是版本号,视具体情况而定),下来只要设定 gcc-4/g++-4 为编译命令就行了。

  4. 最后重编译你的工程,CDT 就会使用 Discovery Options 设定的 gcc 做缺省 include 路径和内置宏发现(方法是对一个空的源文件做 -E 预处理展开)。现在你可以看看工程 Properties→C/C++ General→Paths and Symbols 中被 CDT 自动发现的 include 路径和宏符号了。再看看源码中的 #include <stdio.h> 标准头文件包含,现在也已经自动发现了这些标准头文件的位置了。最后,你可就以按着 Ctrl 键享受 CDT 强大的源码符号跳转了,那是比 VC IntelliSense,VC + Visual Assist X,Source Insight 等精确地多的源码符号索引,更何况 CDT 是开源的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 夏天穿裙子膝盖冷怎么办 天凉嗓子痒咳嗽怎么办 棉服里面跑毛怎么办 棉衣里面的棉一块一块的怎么办 穿姨妈巾悟出痱子怎么办 穿裙子上衣太长了怎么办 微信封号了零钱怎么办 快递加盟商欠我工资怎么办 加盟费交了以后怎么办 加盟总部违约加盟商该怎么办 自行车锁钥匙丢了怎么办 假体隆胸肿胀痛怎么办 恶露60天不干净怎么办 剖腹产俩月恶露不干净怎么办 剖腹产恶露一个多月还没干净怎么办 小月子全身流虚汗怎么办 生完孩子严重便秘怎么办啊 产后第5天恶露少怎么办 有恶露排不出来怎么办 刚生完小孩便秘怎么办 产后15天有鲜血怎么办 恶露未净同房了怎么办 药流2月恶露不尽怎么办 生完孩子小腹痛怎么办 月子里恶露有异味怎么办 恶露干净了有异味怎么办 顺产后恶露白色异味怎么办 产妇排出的恶露有异味怎么办 恶露有股腥臭味怎么办 生完孩子下面有异味怎么办 销售货物开票税率错了怎么办 8h床垫有橡胶味怎么办 买回来的鞋子臭怎么办 耐克保修卡没了怎么办 雅萌保修卡没了怎么办 苹果保修卡没了怎么办 新车迟迟不给合格证怎么办 手机系统剩余空间少怎么办 桌子被掉色的袋子印色怎么办 袋子掉色弄到柜子上怎么办 健身房老板跑路教练怎么办