这是本人的一篇 Eclipse-CDT 安装、配置过程教程,记录了一些通用的 CDT 配置设置,以及一些 CDT 的使用技巧。
目录
有两种方式安装 Eclipse-CDT 开发环境:
先安装 Eclipse 基本环境:Eclipse Classic 。
然后安装 CDT 扩展:Eclipse C/C++ Development Tooling。
参考:Linux 下搭建 C/C++ 开发平台:Eclipse 3.3 + CDT 4.0
直接安装集成的 Eclipse C/C++ 开发环境:Eclipse IDE for C/C++ Developers 。
参考:Eclipse 的各种集成包的区别
如果是初次接触 CDT,建议选择第 2 种:安装集成的 Eclipse C/C++ 开发环境方式,因为 Eclipse IDE for C/C++ Developers 中除过 CDT 外,还会包含其它常用于 C/C++ 程序开发的 Eclipse 扩展,它包括的扩展:见这里。同时,因为 Eclipse IDE for C/C++ Developers 中,去掉了在 C/C++ 程序开发中,没用的 Java 开发扩展,所以它的安装空间比 Eclipse Classic 小。
Eclipse IDE for C/C++ Developers 的安装文件就是个压缩包:Windows 下为 zip 包,Linux 下为 gzip 压缩的 tar 包。将它们解压,就算安装完成,然后执行其中的可执行文件 eclipse,就可以启动 Eclipse-CDT,当然前提是你的系统上要配置好 Java 的运行环境。
这里有一份 Eclipse IDE for C/C++ Developers 的透明背景图标,可用于建立 Windows 的快捷方式,或 Gnome 的启动文件的图标。
下载:ICO 文件,PNG 文件
Eclipse 的之所以强大,是因为它有众多的扩展/插件,可以自由地配置和组合,让 Eclipse 成为满足各类开发人员需求的集成环境。可以在网址:Eclipse Plugin Central,中查找你需要的Eclipse 扩展,目前 Eclipse Plugin Central 已经转移到 Eclipse Marketplace。下面列举几个本人常用的扩展。
Extended VS Presentation
这是一个 Eclipse 皮肤主题扩展,因为自己不喜欢 Eclipse 默认的子窗口圆角 Tab 风格,就换上了这个 Extended VS Presentation 主题。Extended VS Presentation 的风格很简约,子窗口的 Tab 由圆角变为矩形,所以看起来占用的空间也小了。另外,Extended VS Presentation 还支持编辑会话 (Editing Session) 管理,编辑会话指的是当前打开的所有编辑器子窗口,Extended VS Presentation 可以把当前编辑会话保存起来,下次加载这个编辑会话时,就可以将所有保存的编辑器子窗口打开,如果你用过 Firefox 的 Session Manager 扩展,就很容易理解这个功能。
Extended VS Presentation 的安装很简单,从下面的地址中下载安装包:
Extended VS Presentation 的官方地址
Extended VS Presentation 的 Eclipse Plugin Central 地址
Extended VS Presentation 的 Eclipse Marketplace 地址
Extended VS Presentation 的安装包通常命名为 de.loskutov.eclipseskins.extvs_[ver].jar,ver 为版本号。将此 jar 包拷贝到 Eclipse 的安装目录下 plugins 子目录中即可。
启动 Extended VS Presentation:在 Window→Preferences→General→Appearance 设置页中,选择 Current presentation 为 Extended VS Presentation 即可。
当希望在编辑器子窗口 Tab 中显示所编辑文件的扩展名时,可以在:Window→Preferences→General→Appearance→Extended VS Presentation 设置页中,将 Show file extension on tab 复选框勾选。另外,其它 Extended VS Presentation 主题的选项也在这个设置页中设定。
Extended VS Presentation 的编辑会话管理和其它功能,参考 官方地址 中的使用说明和 示例。
这是 Eclipse-CDT 中 Extended VS Presentation 扩展启动后的效果:
Extended VS Presentation 的界面风格
Eclox
Eclox 是一个 Eclipse 的 Doxygen 扩展,Eclox 使用图形界面设置帮你生成 Doxygen 配置文件 (.doxyfile),然后通过调用外部的 Doxygen 工具解析工程中的源码及注释,最后生成程序文档文件。
Eclox 的 .doxyfile 图形设置界面
和 VC 类似,Eclipse 也采用 Workspace»Project,这种两级的工程组织方式。当启动 Eclipse 时,它先会弹出 Workspace Launcher 这个对话框,让你指定一个 Workspace 的位置。你可以在 Workspace: 后的选择框中选择曾经打开的 Workspace 位置,也可以输入一个新的 Workspace 位置。
Workspace 位置实际上是一个普通的目录位置,唯一的区别是:在这里目录中会有一个 .metadata 的子目录,Eclipse 会将 Workspace 相关的所有数据、配置等放在这个目录里面。所以,如果你指定的 Workspace 位置中没有 .metadata 目录,Eclipse 就会在你指定的位置创建 .metadata 目录,即新建了一个 Workspace。
启动 Eclipse 后,还可以在菜单 File→Switch Workspace 中切换到不同的 Workspace 中。
Workspace 是一组 Project 的容器,目的是:为了方便管理、组织工程。一个 Project 默认时,总会继承它所在的 Workspace 中的一些设置。所以在用 Eclipse-CDT 建立 C/C++ 工程之前,先设置好 Workspace 的配置是非常必要的。Eclipse 中 Workspace 的配置在 Window→Preferences 中设置。
Preferences 对话框中的配置项非常多,有时候很难找到需要的配置项,这里有个技巧:Preferences 对话框左边配置项目录树的上面有个编辑框,它支持配置项名字索引查找,将配置项的名字输入后,就会在目录树中列出所有包含此名字的配置项,例如:想设置 C/C++ 的语法高亮,但又记不清它在哪个配置项里,可以直接在查找编辑框中输入 "color",目录树中就会显示所有包括 "color" 的配置项,接下来就很容易找到 C/C++ 的语法高亮配置了,如下图:
下面是一些通常使用的 Workspace 设置:
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">Workspace 的一般配置^
Workspace 的一般配置在:Preferences 对话框下的 General 配置项下。General 配置项下的设置和 Eclipse 中特定的编程语言环境无关,它是 Eclipse 基本环境的配置。常用的 General 配置有以下一些:
颜色与字体^
在 General→Appearance→Colors and Fonts 中,可以设置 Eclipse 各个窗口使用的字体、颜色。例如 Basic→Text Font,它是 Eclipse 中大多数窗口显示文本的字体,比如:C/C++ 的源码编辑窗口的字体 (C/C++→Editor→C/C++ Editor Text Font) 就是默认继承这里的字体来显示 C/C++ 源代码。在 Windows 下,Text Font 的默认字体为 Courier New 10,在显示文本时,中文字符使用系统的默认中文字体:宋体,最后表现出来的字体效果是等宽的,适合用作显示源代码文本。
快捷键^
在 General→Keys 中,可以查看/设置 Eclipse 中使用的快捷键。每个快捷键的设置包括 Command: 快捷键执行的命令,Binding: 快捷键的按键绑定,When: 何时允许激活快捷键功能,比如:C/C++ Editor,表示在 C/C++ 编辑器窗口中;Makefile Editor,表示在 Makefile 编辑器窗口中。在 Conflicts 列表中显示冲突的快捷键。Keys 配置项中包含了三套预置的快捷键设置模式:Default、Microsoft Visual Studio 和 Emacs。
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">Eclipse 的启动与关闭^
在 General→Startup and Shutdown 中,可以设置 Eclipse 启动与关闭时的行为,包括 Eclipse 启动时自动激活的插件。如果需要在 Eclipse 启动时,显示 Workspace Launcher 对话框来选择工作的 Workspace,可以将这里的 Prompt for workspace on startup 复选框选上(默认为选上)。
工程自动生成与保存^
在 General→Workspace 中,包含与工程自动生成、保存相关的选项。常用的有:
Build automatically:一般将这个选项去掉,因为如果选择上的话,当保存已修改的源代码文件后,或执行 Clean 工程后,都会自动执行 Build 工程。这个选项也可以通过 Eclipse 菜单 Project→Build Automatically 设置。
Save automatically before build:一般选上这个选项,意思是:在执行 Build 工程(编译工程)之前,先保存工程,包括保存已修改的源代码文件。
Workspace save interval:指定 Workspace 中所有工程的自动保存时间间隔,以分钟为单位。
文本文件的字符集编码和换行符类型^
在 General→Workspace 中,可以设置文本文件的字符集编码和换行符类型。Eclipse 默认继承系统的字符集设置和换行符类型,例如:在中文 Windows 下,Text file encoding 的 Default 值为 GBK。如果经常编辑在 Windows 与 Linux 下同时工作的源代码,为了方便工程的移植性,可以显式地将 Text file encoding 设置为 UTF-8,并将 New text file line delimiter 设置为 Unix。
注意:
当设置 Text file encoding 为 UTF-8 后,Eclipse 新建的文本文件为不带 BOM 的 UTF-8 编码。
MinGW GCC 4 和 Linux GCC 4 对不带 BOM 的 UTF-8 编码的源文件支持都很好,所以设置 Text file encoding 为 UTF-8,是满足方便代码移植的需求的。
无论是使用 Console 还是 GUI 的形式,一个应用程序要在屏幕上输出期望的字符串文本,应满足下列三个条件:
在源程序中,使用合适的基本字符类型,如:char、wchar_t。并对程序依赖的运行环境、库,调用它们提供的接口,设置合适的字符集上下文,比如:C 标准库的 setlocale() 函数,C++ 标准库的 locale 类。
源程序本身用合适的字符集编码保存,这对源程序中使用字符串字面量的程序尤其重要。
程序依赖的运行环境/库,它们必需能够支持和适配程序所使用的字符集,例如:当程序通过 C 标准库 (e.g. printf()),最终向 stdout 输出 UTF-8 编码的字符串时,下层用于显示输出的终端设备或控制台环境,必需使用 UTF-8 编码作为活动字符集。Windows 下可以用 chcp.com 更改当前控制台的活动字符集,Gnome 下可以在 gnome-terminal 的菜单中改变活动字符集。
文本编辑器的设置^
文本编辑器的一般配置在:Preferences→General→Editors→Text Editors。
这里的部分配置会影响到 C/C++ 源代码编辑器窗口中的源代码显示。Text Editors 中常用的配置项有:
Displayed tab width:Tab 的宽度,通常为 4 个空格。在 C/C++ 源代码编辑器中,这里的配置会被 C/C++ 的 Code Style 中的配置覆盖,即这里的配置对 C/C++ 源代码编辑器显示源代码文本不起作用。
Insert spaces for tabs:键入 Tab 时,实际输入的是 Tab 宽度数目的空格字符。在 C/C++ 源代码编辑器中,这里的配置会被 Code Style 中的配置覆盖。
Highlight current line:高亮当前编辑的文本行。
Show print margin:显示列边线。显示边线的列数 Print margin column 通常设置为 80 个字符。这个功能对程序员来说很贴心:当一行代码超过列边线时,程序员就知道这行写地有些过长了,应该换行排版。列边线通常设置为 80 个字符,是因为早期的字符终端通常是:25 行 × 80 字符/行。
Show line numbers:在每行文本前显示行数。显示行数后,行数和每行文本间看起来很拥挤,况且在 Eclipse 状态栏已经显示当前编辑光标所在的行、列数,所以通常把这个设置去掉。
Show range indicator:在光标所在的文本区域前显示一个颜色块,表示这个范围内的文本属于同一个文本区域。这又是一个很贴心的功能,对于 C/C++ 编辑器,一个函数过程就被识别为一个文本区域。
Show whitespace characters:以特殊的图形符号显示空白字符。空白字符包括:空格 (SP)、Tab、回车 (CR)、换行 (LF) 等。另外,除了在 Workspace 的 Preferences 中可以启动这个功能外,还可以在 Eclipse 的工具条中点击按钮 ,来立即启动/停止显示空白字符的功能。
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">Eclipse 中配置 MinGW 工具集^
Eclipse-CDT 支持多种开发工具集 (Development Toolchain):MinGW、Cygwin、Linux GCC 等,对于这些工具集,Eclipse-CDT 会帮你自动设置常用 的编译、链接选项,并且可以在 Project 的 Properties 设置中使用图形界面来调整编译、链接选项。如果要使用 Eclipse 不直接支持的工具集,比如:VC 的工具集 或 Intel C++ Compiler (ICC),则需要自己写 Makefile 来从 Eclipse 外部管理编译、链接选项。
在 Preferences 的 C/C++→New CDT project wizard 中,可以查看已被 Eclipse 识别的 MinGW 工具集:MinGW GCC。同时,可以在这里把 MinGW GCC 设为某一特定 Project type(工程类型,包括:Executable、Shared Library、Static Library、Makefile Project)的默认工具集。
在 Preferences 的 C/C++→New CDT project wizard→Makefile Project 中,可以进行 Makefile Project 工程类型的工具集配置,这些配置也可以在每个工程的属性中设置,并且工程的设置会覆盖这里的 Workspace 设置:
在 Builder Settings 属性页中,可以设置使用外部生成器 (External builder) 的命令,默认是 make。有时 MinGW 工具集中将 GNU Make 命名为 mingw32-make,这是需要在 Build command: 后输入期望的生成器命令名。
Workspace 中外部生成器 (make) 的配置
在 Behaviour 属性页中,可以设置生成器的行为参数,比如,对于大多 make 类工具:Build 工程时,一般的参数为 all,Clean 工程时,一般的参数为 clean。另外,最好将 Build on resource save (Auto build) 复选框去掉,它的意思是:当保存资源时,比如保存源代码文件时,自动进行 Build 工程。
代码风格、模板与高亮语法^
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">C/C++ 代码风格^
C/C++ 代码风格的配置位置在 Preferences→C/C++→Code Style。C/C++ 代码风格设置包括:缩进方式、大括号 {} 的换行方式、单词间的空白字符设置等。
在 Code Style 已有 4 个内建的 C/C++ 代码风格配置:K&R、BSD/Allman、GNU、Whitesmiths。习惯 Windows 平台编程的程序员,通常选择 BSD/Allman 风格,因为它是 Windows 和 Linux 下都常用的代码风格。点击 New 按钮,选择基础的风格后,再点击 Edit 按钮,进入具体的代码风格元素的设置,最后可以配置出自己习惯的代码风格。
通常在 BSD/Allman 基础风格中,修改 Identation→Tab policy 为 Spaces only,意思是:在键入 Tab 时,实际输入的是 Tab 宽度的空格。使用空格代替 Tab,对于用不同编辑器显示源代码时的效果,以及拷贝、粘贴源代码后仍保持原有缩进效果很有用。
自己配置的代码风格,可以在代码风格 Edit 对话框中,点击 Export 按钮导出保存成文件。在 Code Style 界面中可以用 Import 导入以前保存的风格。
技巧:
如果编辑已有的源文件,但里面的代码风格和新加入的代码风格不同,怎样快速地把以前的代码转换为现在的风格?先选择要转换的代码文本,然后在右键菜单中选择:Source→Format,或快捷键 Ctrl+Shift+F,就可以将选择的代码文本转换为当前的代码风格。
使用当前的代码风格,格式化源文件代码
自动生成代码的模板^
自动生成代码的模板在 Preferences→C/C++→Code Style→Code Templates 中设置。
自动生成代码的模板有三个级别:注释 (Comments)、代码 (Code)、文件 (Files)。在代码模板里可以使用很多 Eclispe 内置宏,比如:${date} 表示当前的日期,${user} 表示当前的系统登录用户。Eclipse 在自动生成代码时,会将这些宏扩展成实际对应字符串。另外,在 C/C++→Template Default Values 中,有 4 个宏:message、sourceDir、author、copyright,可以设置它们的值,使用向导创建 Hello World 工程时,自动生成的代码文件就会使用这里的宏。
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">C/C++ 代码语法高亮设置^
C/C++ 代码语法高亮在 Preferences→C/C++→Editor→Syntax Coloring 中设置。
在 Syntax Coloring 中,CDT 将语法元素分为四类:Code、Assembly、Comments、Preprocessor。选择特定的语法元素后,可以更改它使用的字体颜色、斜 体、加粗、下划线效果等,设置后可以立即在下面的 Preview 中预览代码语法高亮效果。
这是本人使用的代码语法高亮方案:我的 C/C++ 代码语法高亮方案
代码自动完成^
CDT 默认的 C/C++ 代码自动完成功能配置已经很好用了,只需要进行调整即可。
自动完成的代码模板在 Preferences→C/C++→Editor→Templates 中设置。注意,这里的模板功能和 Code Style 中 Code Templates 之间的区别:Code Templates 是 Eclipse 自动生成代码的模板,而这里的 Templates 是程序员输入一部分代码后,要求 Eclipse 自动完成、补全所有代码的模板。
可以自己新建,或更改已有的自动完成代码模板。自动完成代码模板分两类:
C/C++ 代码的自动完成。此时模板的 Context 为 C/C++,Context 是自动完成时的作用域,包括 C/C++ 语句、代码块等的自动完成。
例子:建立一个 Name 为 main 的模板,在 Pattern 中输入以下代码文本模式:
int main(int argc, char** argv) { ${cursor} return 0; }
编辑 C/C++ 源代码时,输入 main(即模板的 Name),然后按快捷键 Alt+/,就可以直接插入上面的 main 函数代码块。其中,${cursor} 是个宏,表示当这段代码自动完成之后,编辑光标停留的位置。
注释的自动完成。此时模板的 Context 为 Comment,只在注释区域内进行自动完成。
注意:CDT 中默认的模板都是 K&R 的代码风格,喜欢 BSD/Allman 风格的话,需要修改一下,或者在 Templates 设置面板的最下面有个 Use code formatter 选项,将它选上,就会用设置的代码风格格式化自动完成的代码。
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">将代码自动完成加入 Content Assist^
自动完成代码模板配置好后,需要将代码自动完成加入 Content Assist,位置在 Preferences→C/C++→Editor→Content Assist。
首先需要将 Content Assist→Advanced 中的 Select the proposal kinds contained in the 'default' content assist list 中的 Template Proposals 选择上。这里的意思是:将 Template Proposals 放入 Default Proposals 中,Template Proposals 是指模板候选代码完成的类别,即使用上面提到的在 Templates 中设置的内容来进行候选完成代码的生成。另外还有其它类别的候选完成代码:Help Proposals、Parsing-based Proposals、Word Proposals。
然后可以在 Content Assist 中的 Insertion 中,将 Insert single proposals automatically 去掉,这个选项的意思是:当只有一个候选完成功能 (Proposal) 匹配当前文本时,直接插入文本到文件中,而不给用户选择的机会。
代码自动完成的启动方法:光标定位到要自动完成的文字后,选择右键菜单中的 Source→Content Assist,或快捷键 Alt+/,此时会弹出完成代码上下文菜单,里面列举了候选的完成代码,用户选择一个后,就会插入这段完成代码到源文件中。如果在弹出完成代码菜单的情况下,继续按快捷键 Alt+/,菜单中的内容就会在不同类别的候选完成代码间切换,切换的顺序可以在 Content Assist→Advanced 中的 Content assist cycling 中设置。
代码自动完成效果如下:
使用模板进行代码自动完成
名字高亮显示^
名字:指 C/C++ 代码中的变量名、函数名、宏名、自定义类型名等实体名字。
名字高亮显示 (Mark Occurrences):指光标停在一个名字上后,在这个名字的作用域内,高亮显示所有出现的这个名字。
名字高亮显示的在 Preferences→C/C++→Editor→Mark Occurrences 中设置。选择 Mark occurrences of the selected element in the current file 选项,就会启动名字高亮显示功能。另外有个 Keep marks when the selection changes 选项,它的意思是:光标第一次定位到某个名字上时,高亮显示这个名字,此时如果将光标移到另外的非其它名字的位置,先前的那个名字依然被高亮显示,直到光 标移到其它名字上时,才会取消原来名字的高亮显示,转而高亮显示新定位的名字。
另外,还可以在 Eclipse 的工具条中点击按钮:,可以立即启动/停止名字高亮显示功能。
名字高亮显示所使用的颜色在 Preferences→General→Editors→Text Editors→Annotations 中设置,选择 Annotation types 中的 C/C++ Occurrences,然后设置颜色即可,通常将它设置为 正黄色 (#ffff00)。
名字高亮显示的效果如下:
代码中名字高亮显示
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">任务标记 (TODO list)^
CDT 中使用任务 (Task) 来管理开发计划,任务是 Workspace 级别的:一个 Workspace 中所有 Project 的任务都在 Tasks 窗口中列出,Tasks 窗口可用菜单 Window→Show View→Tasks 调出。
任务标记 (Task Tag) 是一种特殊格式的 C/C++ 代码注释,CDT 会扫描并识别这种注释,生成一条任务。由任务标记生成的任务,在 Task 窗口中双击后,代码编辑器会立即跳转到对应的任务标记注释位置,并在那行注释前显示图标:。这个功能的意义在于:先记录发生问题的代码位置,方便以后解决问题。
Task 的也可以从公共服务器上 (Task Repository) 下载/上传,例如 Bugzilla,很适合团队成员分散在各地的异步开发。
任务标记的注释格式在 Preferences→C/C++>→Task Tags 中设置,默认的任务标记格式是:注释以 "TODO: " 打头。
任务标记的使用效果如下:
使用 TODO 注释做成任务列表
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">符号检索 (Symbol Indexing)^
符号检索是对一个工程中所有 C/C++ 源代码中各种符号、名字引用的快速定位。目前优秀的代码编辑环境都支持符号检索,比如:Visual Stdio/VC 内置的 Intellisense、VC 的 Visual Assist X 插件、SourceInsight 等。目前,无论是哪种支持符号检索的编辑环境,在使用符号检索功能前,都需要对一个工程中的 C/C++ 源代码进行扫描,生成索引数据库,例如 VC 的 .ncb 文件,就是 VC 的 Intellisense 生成的索引数据库文件。
CDT 的索引数据库文件扩展名是 .pdom,保存在 Workspace 的配置目录 .metadata/.plugins/org.eclipse.cdt.core 之下,索引数据库文件名格式一般是 [Project-Name].[Random-Number].pdom。
索引数据库的生成选项在 Workspace 和 Project 中都可以配置,Project 中的配置会覆盖 Workspace 中的配置。Workspace 中索引的配置在 C/C++→Indexer 中。
在 Indexer 中,可以选择三种建立索引的基本方式:Fast C/C++ Indexer(快速索引)、Full C/C++ Indexer(完全索引)、No Indexer(无索引),一般选择 Fast C/C++ Indexer,就足够对一般工程的代码进行准确地符号检索了。如果觉得使用 Fast C/C++ Indexer 时,有些符号仍然不能正确检索,可以将选项 Index all files 选择上,不过这样建立的索引文件就会变大,建立索引的过程也会变慢,所以不建议在 Workspace 的索引配置里选择这个选项。
在 Files to index up-front 中输入的文件名,会在建立索引时首先被扫描,默认是:stdarg.h、stddef.h、sys/types.h。
在 Indexing strategy 中可以设置建立索引活动的策略:
Automatically update the index:自动更新索引。
Update index immediately after every file-change:当文件内容改变后,立即更新索引。
CDT 的索引建立过程本来就有些慢,而上面两个选项会使建立索引活动变得更频繁。不过为了在最新的代码文件中使用准确的符号检索,一般将这两个选项选择。
在 Build configuration for the index 中,可以指定索引配置如何应用到工程配置项中,选择下面两者中的一个:
Use active build configuration:使用活动的工程配置项建立工程的索引。一般选择这个选项,因为工程配置项会影响到 C/C++ 源代码和符号检索,例如:同一个工程的 Debug 和 Release 配置项,会因为宏定义不同,而使用不同的代码。
Use the build configuration specified in the project's indexer settings:在 Workspace 中不指定被索引的工程配置项,而使用 Project 配置中设置。
使用符号检索的方法有多种。最简单、最常用的是跟踪符号到其定义或声明,方法是:按住 Ctrl 键,然后点击某个符号,就会跳转到其定义或声明位置。
如果程序的符号检索出现了不正确的情况,可以点击 Project 右键菜单 Index→Rebuild 重建符号索引:
重建工程的符号检索索引
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">备份与移植 Workspace 配置^
设置起来的诸多 Workspace 配置,怎样将它备份呢?怎样将一个已设置好的 Workspace 配置,应用到其它 Workspace 上呢?
对一个 Workspace 配置的备份其实就是备份 Workspace 的配置目录 .metadata,并删掉其中的各 Project 设置:
(1). 先在 Eclipse 中删除该 Workspace 的所有 Project。
(2). 然后在关闭 Eclipse,在 .metadata 中搜索所有跟 Project 有关的文件,删除掉,比如工程的索引数据库文件 .pdom
(3). 最后备份这个 .metadata 目录即可。
当要使用以前备份好的 Workspace 配置时,将备份的 .metadata 目录拷贝到期望建立 Workspace 的目录下,然后启动 Eclipse 时,在 Workspace Launcher 对话框中,此目录的位置,就可以让 Eclipse 使用已设置好的 Workspace 配置。
Workspace Launcher 对话框中显示的最近打开的 Workspace,这个保存在 Eclipse 的程序配置目录中的 configuration/.settings/org.eclipse.ui.ide.prefs 文件中。org.eclipse.ui.ide.prefs 文件中的 RECENT_WORKSPACES 值记录了最近打开的 Workspace,如果要清空最近打开的 Workspace 记录,将它的值设置为空即可。
在 C/C++ Projects 窗口中显示了当前 Workspace 的所有 Project,C/C++ Projects 窗口可以使用菜单 Window→Show View→C/C++ Projects 调出。
选定一个Project后,可以用菜单 Project→Properties,或右键菜单中的 Properties,或快捷键:Alt+Enter 调出该工程的配置对话框。
C/C++ Projects 窗口和工程的属性菜单项
工程配置会继承 Workspace 中的一些配置,如果工程配置中改变这部分配置的话,工程的设置会覆盖掉 Workspace 的设置。在工程配置中 C/C++ General 中有 Enable project specific settings 选项,启动这个选项后,会在工程目录下产生 .settings 目录,里面保存只针对该工程的设置。
工具集配置^
Eclipse-CDT 默认能够建立 4 种工程类型:Executable、Shared Library、Static Library、Makefile Project。
如果使用 Eclipse-CDT 管理工程的生成,则可以选择前 3 种工程类型。此时使用 CDT Internal Builder 来控制编译生成过程,即 CDT 内建的 builder 工具。
如果使用已有的 makefile 管理工程的生成,例如:使用 automake 生成的 makefile,或编译已提供 makefile 的第三方程序,这时可以建立 Makefile Project 工程类型。
Project 属性中的配置有许多和 Workspace 中的相同,例如 Tool Chain Editor、Code Style、Indexer 等,设置方法和 Workspace 相似,只是作用在工程级别上,这里不再赘述。
外部生成器^
可以将生成器 (builder) 从 CDT Internal Builder 改变为外部的 make,位置在工程属性中 C/C++ Build 的 Builder Settings 设置中,将 Builder type 从 Internal builer 变为 External builder 即可,最后在 build command 中填入 make 的程序名,例如 MinGW 的 mingw32-make。这个也可以在 C/C++ Build→Tool Chain Editor 中改变 Current builder 为 Gnu Make Builder 达成,两者是同一个设置的不同界面显示。
使用 CDT 外部的 make 管理工程生成
" src="/CuteSoft_Client/CuteEditor/Images/anchor.gif">CDT 自动生成 makefile^
将 Builder Settings 中的 Generate Makefiles automatically 选上,CDT 会自动通过扫描工程中的源文件,帮你生成和管理 makefile。
该选项会影响 C/C++ Build→Settings。Settings 中有以下选项卡:
Tool Settings:在其中可以设置汇编器、编译器、链接器的选项,CDT 根据这些选项生成 makefile,
Build Steps:生成前和生成后执行的命令。
Build Artifact:作为生成结果的程序的类型、名称、扩展名,例如:类型可选 Executable、Shared Library、Static Library,扩展名为 exe。
Binary Parsers:可执行程序分析器,用于解析某种可执行程序格式,比如 PE、Elf 等。通常作为编译结果的可执行程序中,可能包括用于调试的符号信息,可以在这里配置例如 nm 等可执行程序符号分析工具。
Error Parsers:捕获和分析编译生成过程的错误,即运行 builder,如外部 make 工具时发生的错误。这样就可以把编译、链接时,源程序的错误显示到 Eclipse 的 Problems 窗口中。
如果是 CDT 自动生成 makefile,Settings 中将会包括上面所有选项卡。
如果使用已有的 makefile,则 Settings 中只有 Binary Parsers 和 Error Parsers 选项卡。
符号检索配置^
这是工程配置中对 Workspace 中符号检索配置的调整。
需要索引什么^
在做具体设置前,先了解一下对源代码的符号索引究竟会涉及到代码的哪些方面:
名字索引:这是符号检索最基本的功能,上面 Workspace 中配置也提到了,就是一个名字(类型名、函数名、变量名、常量名)在哪里定义、哪里声明、哪里使用等信息。有了这个,就可以在 Eclipse 编辑器中按 Ctrl 键点击进行跳转到定义处,或按 F3 (Open Declaration) 跳转到声明处,或鼠标悬停到宏名上会自动显示展开的宏定义。
宏嵌套:对复杂的宏嵌套定义中的名字的正确识别。
对外部源代码的索引:用户程序中一定会 include 工程外部的头文件,例如标准库,那么也需要对这些包含进来的源文件中的名字进行索引,这样当你按 Ctrl 键点击外面名字时,例如标准库的 printf() 时,编译器才会跳转到 stdio.h 中 printf() 的声明。
对编译器产生的名字的索引:有些名字并不是在源程序中书写的,而是在编译过程,或编译器中产生的,例如 gcc 的 -D 选项、VC 的 /D 选项。必需让 CDT 发现并识别这些名字,并按正确的顺序加以索引。
不同的配置项/条件编译中的索引:最常用的两个配置项是 Debug 和 Release 版程序,在用户的程序中会根据不同配置项中的宏定义,如 Debug 版中有 DEBUG 宏定义,采用条件编译的方法使用不同的源代码,这时需要 CDT 对不同的配置项/条件编译中的代码分别进行索引,达到名字逻辑的一致。
实际上,只要配置得当,CDT 对上面的所有方面都有很好的支持。
自动发现路径和符号^
如果使用 CDT 自动生成 makefile,则在 C/C++ Build→Settings 的 Tool Settings 选项卡中可以定义 include 的搜索路径、编译器产生的宏 和 链接库的路径,对应 gcc 的 -I, -D 和 gcc/ld 的 -l, -L 选项。
在 C/C++ Build→Discovery Options 中选择 Discover profiles scope 为 Configuration-wide,然后选中 Automated discovery of paths and symbols 选项,这样 CDT 就会扫描 makefile 中 gcc 的 -I, -D 等选项,将扫描到的宏和路径加到 C/C++ General→Paths and Symbols 的列表中。
选中 Configuration-wide 的 Enable generate scanner info command 选项,在 Compiler invocation command 中填入正确的编译器名,如 gcc, gcc.exe, g++-4.exe 等,在 Compiler invocation arguments 中填入编译选项 -E -P -v -dD ${plugin_state_location}/specs.cpp,一般这个 CDT 已帮你自动填写了。需要注意的是:CDT 就是利用 gcc 的 -E 选项,发现 gcc 内置的宏和搜索路径的,例如 g++ 的 __cplusplus 宏定义、标准库的路径等,具体的原委参考:
Eclipse CDT 实现符号与路径自动发现的幕后:gcc 的 -E 选项
Cygwin GCC 的 Makefile 工程在 Eclipse CDT 中配置符号与路径自动发现方法
CDT 自动发现 Cygwin GCC 中的宏定义
手工设置路径和符号^
在 C/C++ General→Paths and Symbols 中可以手动添加工程需要的 include 路径、链接库路径和宏定义,在 Include、Symbols、Library Paths 面板中的下方有个 Show built-in values 复选框,选上后就会显示 CDT 自动发现路径和符号。
Paths and Symbols 包含以下选项卡:
Include:搜索工程引用头文件所在路径
Symbols:搜索工程引用宏符号
Library Paths:搜索工程引用的库文件所在路径
Source Location:源代码搜索路径
Output Location:生成结果程序的路径
References:引用的其它工程
不建议在 Paths and Symbols 中手工设置路径和符号,而最好将路径和宏定义放到工程的编译生成配置中,然后由 CDT 的自动发现路径和符号功能识别并显示这些路径和符号,即:(1). 对于 CDT 自动生成 makefile 的工程,在 C/C++ Build→Settings 的 Tool Settings 选项卡填写路径和宏定义。(2). 对于使用已有 makefile 的工程,应该直接在 makefile 中书写编译搜索的路径、宏定义,或者用 autotools/automake 工具管理。
这篇文章是自己配置使用 Eclipse-CDT 的技巧总结,有一些实用功能也是经过长时间使用后发现的,例如 CDT 对符号检索的良好支持。Eclipse-CDT 的使用感觉是,让人觉得它设计的很开放 和 足够的灵活,我相信读者只要理解上文的思路,也很容易配置出使用 VC 编译工具的 CDT 环境。
总之,CDT 作为开源的 C/C++ 开发环境,除了对超大工程的符号索引有些慢,其它各方面,包括高效的异步开发、跨平台开发、程序编写与阅读体验上都不凡。也许你正在找一款优秀的跨平台 C/C++ 集成开发环境,那么希望你读完本文后,对 Eclipse-CDT 已有所感觉,也希望本文能帮助你解决一些 CDT 的使用问题 O(∩_∩)O。