`
wjmming
  • 浏览: 57261 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

 

(转载)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 符号与路径自动发现的方法,步骤如下:

  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 是版本号,视具体情况而定,3是肯定不能),下来只要设定 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 是开源的。

     

    (转载)http://codingdao.com/wp/post/cygwin-eclipse-cdt-makefile-symbol-path-discovery/

分享到:
评论

相关推荐

    Eclipse下的c/c++开发环境配置

    本文将详细介绍如何在 Windows 环境下配置 Eclipse 的 CDT(C/C++ Development Tools)插件,并设置必要的 Cygwin 工具链来支持 C/C++ 编程。 #### 一、安装 Cygwin 和 Eclipse CDT 1. **安装 Cygwin:** - ...

    用eclipse 调试NS2

    在这种情况下,需要在运行配置中添加路径,指向Cygwin的`bin`目录,以确保所有依赖项都能找到。 7. **Eclipse调试优势**: 使用Eclipse的图形化调试界面相对于命令行工具gdb来说,通常更加直观和方便。它提供了...

    使用eclipse来开发c,c++

    在本文中,我们将探讨如何使用Eclipse作为C和C++的集成开发环境(IDE),以及如何配置所需的编译器和工具链。Eclipse是一个广泛使用的Java IDE,但它也可以通过插件扩展来支持其他编程语言,如C和C++。Eclipse CDT...

    eclipse 开发c/c++

    在 Eclipse 中安装 CDT 之后, 浏览至 File =&gt; New =&gt; Project,在那里,您将发现三个新的可用项目类型:C(“Standard C Make Project”)、C++(“Standard C++ Make Project”)和“Convert to C or C++ Projects...

    Android NDK Cygwin配置

    ### Android NDK Cygwin配置详解 #### 一、什么是Android NDK? Android Native Development Kit (简称NDK) 是Google官方提供的一个工具包,旨在帮助开发者利用C或C++语言编写原生应用代码。这对于那些希望利用高...

    cocos2d环境搭建过程

    在JNI编译环境配置中,我们需要转换工程、添加Makefile project、配置C/C++ Build和C/C++ General -&gt; Paths and Symbols。最后,我们可以验证JNI编译环境是否配置成功。 下载cocos2d-x 最后,我们可以下载cocos2d-...

    使用eclipse调试PSP程序.pdf

    - **Eclipse + CDT**: Eclipse 是一款非常强大的开源集成开发环境(IDE),而CDT (C/C++ Development Tools) 则是Eclipse 的插件之一,专门用于C/C++ 的开发。 - **Cygwin + Toolchain**: Cygwin 是一款在Windows ...

    EclipseEmbeddedLinuxPaper 文挡

    - 配置编译器路径:在Eclipse中指定GCC的路径,以便IDE能够识别编译命令。 - 设置调试器:配置GDB的路径及其参数,实现与Eclipse的无缝对接。 - **使用Cygwin作为底层Unix仿真层**:在Windows环境下,Eclipse可以...

    JunQi:四国军棋

    使用的是64位msys2,直接在eclipse导入工程即可,需在工程目录下新建一个bld文件夹 GUI已经支持makefile编译,ENGINE工程比较简单没什么依赖还是由eclipse自动编译 需要设置GTK +的环境变量地址为D:\ msys64 \ ...

    mingw-w64.zip

    7. **开发环境集成**:Mingw-w64可以与各种开发环境集成,例如Code::Blocks、Eclipse CDT、Qt Creator等,这些IDE可以直接使用Mingw-w64的编译器和工具链。 8. **跨平台开发**:Mingw-w64不仅用于本地Windows开发,...

    C++ 经典开源代码列表.docx

    Eclipse-CDT是IBM开发的IDE,通过安装CDT插件支持C++开发。 这些库和工具极大地丰富了C++的生态系统,使得开发者能够在不同的领域和平台上高效、稳定地进行开发。选择合适的库不仅可以提升开发速度,还能保证代码的...

Global site tag (gtag.js) - Google Analytics