(转载)http://codingdao.com/wp/post/cygwin-eclipse-cdt-makefile-symbol-path-discovery/
首先使用 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 符号与路径自动发现的方法,步骤如下:
-
工程 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 路径和宏符号的自动发现。
-
把 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 能找到线索。
-
特别注意:如果你在 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 是版本号,视具体情况而定,3是肯定不能),下来只要设定 gcc-4/g++-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 是开源的。
(转载)http://codingdao.com/wp/post/cygwin-eclipse-cdt-makefile-symbol-path-discovery/
分享到:
相关推荐
在Windows下用Eclipse+CDT+cygwin搭建GDB调试平台 以下软件均为Windows平台下的版本。 1、 安装JDK,目的是为了Eclipse的运行。 版本是jdk-1_5_0_06-windows-i586-p.exe或更高 ,下载地址...
window 下eclipse、cygwin、 cdt ndk的详细配置文档。
自己下载的cygwin包含了gcc/git等常用的下载内容,从163下载的
cygwin
cygwin
cygwin 下通过gcc编译dll文件,交给java调用
cygwin离线安装包
Eclipse下配置NDK不用安装Cygwin
Cygwin下的mips-linux-gcc交叉编译工具链,版本:4.8.4
cygwin with gcc4.5+ cygwin 最小化开发工具箱
Cygwin下的arm-linux-gcc交叉编译器,版本:4.8.4
Cygwin中使用C编译器的详细教程,是一本不可多得的好书,现在已经绝版了
windows下生成arm-linux-gcc的工具.省了自己配置和编译的很多麻烦.生成的arm-linux-gcc自己进行过验证,可以使用.
Windows下Cygwin环境的Hadoop安装- 在Eclipse中重新编译hadoop的jar包
cygwin产生vivado工程的方法
NULL 博文链接:https://pskfire.iteye.com/blog/1701264
cygwin上升级GCC,目前GCC的版本为 3.4.4。升级为:4.0.0.
cygwin下如何建立arm-linux-gcc,非常好,拥有很强的借鉴意义
cygwin
在 Eclipse 中安装 CDT 之后, 浏览至 File => New => Project,在那里,您将发现三个新的可用项目类型:C(“Standard C Make Project”)、C++(“Standard C++ Make Project”)和“Convert to C or C++ Projects...