全方位打造 Eclipse 自定义开发环境

摘要:
前言作为一个开源的跨平台集成开发环境,Eclipse本身体现了开源和跨平台可移植性的强大优势。通过本文,作者将展示如何通过Eclipse创建自定义编译环境、运行环境、调试环境以及自定义错误分析器、代码跳转和其他功能。

前言

Eclipse 作为一款开源的跨平台的集成开发环境,本身就体现出了开源的强大优势和跨平台的可移植性。不仅有众多的开发人员为它开发了不计其数的插件,而且以它为模板进行二次开发的商业IDE也不在少数,比如 MyclipseWolfram Mathematica 的 WorkBench  等。同时,它也提供了几乎对所有语言的开发支持,从主流的 Java,C++,Python 到 及其非主流的 Linden Scripting Language,这种兼容并包的精神是闭源软件难以望其项背的。虽然说,专一的IDE会给特定项目的开发带来更加优秀的功能支持,比如 Visual Studio 配合上一些插件 在一定程度上 给用户带来的开发体验要远远优于CDT,但对于笔者经常跨平台工作、使用多种语言的开发者来说,也不得不含泪对Visual Studio 说 Goodbye,只得转战到 Eclipse 阵营中——Vim嘛,还达不到这么Geek的地步。。。

目标

Eclispse的CDT本身提供了自己的项目格式,.cproject,可以自己设定make方式,但终究在开发者和源代码之间建立了一个不太透明的隔阂,对于更加细致的编译要求也很难进行配置,因此笔者要放弃Eclipse的编译功能,使用 cmake  进行项目编译工作,Eclipse则从事除了编译以外的 代码编写、项目管理、源码控制等功能。通过本文,笔者将要展示如何通过Eclipse创建自定义编译环境,运行环境,调试环境,及自定义错误分析器,代码跳转等功能。

环境

Scientific Linux 6.1

Eclipse IDE for C/C++ Developers Indigo Service Release 1

cmake version 2.6-patch 4

gcc (GCC) 4.4.5 20110214 (Red Hat 4.4.5-6)

GNU Make 3.81

创建项目

创建一个c++项目,类型选 Makefile project - Empty Project - Other Toolchain,这个目的主要是为了让Eclipse尽量少的给我们的项目加额外的配置参数。

全方位打造 Eclipse 自定义开发环境第1张

现在得到一个完全空白的项目,我们给他添加 CMakeLists.txt , main.cpp 和 build.sh 三个文件

为了方便编辑cmake文件,可以下载 CmakeED 插件,它可以提供代码高亮和提示功能。

我们先来写一段简单的 cmake 代码

# config
cmake_minimum_required(VERSION 1.0)
PROJECT(HelloCMake)
 
# working directory
SET(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/build)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
 
# source
AUX_SOURCE_DIRECTORY(. src)
 
# target
ADD_EXECUTABLE(HelloCMake  ${src})

 

以及 c++ 程序

#include <iostream>
usingnamespacestd;
 
intmain()
{
    intsum=0;
    for(inti=0;i<100;++i)
    {
        sum+=i;
    }
    cout<<"Hello CMake!"<<endl
        <<"Sum is "<<sum<<endl;
}

  

build.sh 负责编译我们的程序,你可下载 ShellED 来辅助编辑 shell script

我们的编译命令如下

#! /bin/bash
 
dir=build/HelloCMake_obj
 
if[ ! -d  $dir ]; then
    mkdir -p $dir
fi
 
cd $dir
cmake ../..
make -j2

  

编译配置

 打开项目属性,在 C++ Build 选项页的 Builder Settings里,去掉 Use default build command,在 Build command 里输入 ${ProjDirPath}/build.sh

全方位打造 Eclipse 自定义开发环境第2张

 ok。

在build前要记着给 build.sh 加上 可执行 属性,chmod +x ~/develop/eclipse/HelloCMake/build.sh 

 然后build,之后输出窗口中就会显示出来我们的自定义build结果

全方位打造 Eclipse 自定义开发环境第3张

运行程序

我们的 可执行程序 并不是输出在正常目录里,因此 CDT 不会给我们生成自动的运行命令,我们需要自己设置;因为我们生成的甚至不一定是c++程序,因此使用自定义 Extern Tool 比自定义Run 更合适。

打开 Extern Tools Configuration,在 Progam 里新建一个命令,在 Location 里选择可执行程序命令,比如 ${workspace_loc:/HelloCMake/build/HelloCMake}。Work Directory是程序的启动路径,程序代码中使用 . 和 .. 进行路径查找时就是相对于这个目录;因此在 Visual Studio里开发程序有时会发现,在 vs 里运行程序没问题,但是进入程序文件夹运行程序出bug了,就是因为两种方式设置的 Work Directory不同。

最好把Build 选项卡里的 Build before lauch选项去掉;因为我们的程序现在已经不再局限在这一个项目中,而是以 WorkSpace作为参考系的,因此这个选项会导致编译整个WorkSpace,所以根据自己情况选择是否保留这个选项。

然后运行这个外部工具,就会看到我们的运行结果了。

错误分析器

我们给程序随便加点 bug,比如把 int sum 改成 int Sum,再编译程序就会出错了。因为在我们的build.sh 中,使用的都是标准工具,所以编译错误都被CDT直接识别出来了。在这点上,省却了我们不少麻烦。

打开项目属性,打开 C/C++ Build - Settings - Error Parsers,这里就是系统内嵌的标准分析器,它们的工作原理很简单,对 CDT console 的每一行输出进行正则表达式匹配,然后把匹配的组映射为文件、行、原因等参数,然后被 Probelm 接收。

如果我们的编译工具非主流,它的输出不符合上述分析器提供的功能,我们就没法根据输出定位错误位置了;这时,我们就可以自定义自己的 Error Parsers 来执行这项工作。

我们把程序改回去,而是给 CMakeLists 加点错误。

然后我们会得到类似的输出

全方位打造 Eclipse 自定义开发环境第4张

这里有一些 CMake 错误,但是分析器无法分析;我们就需要自己来实现。

首先这里有点局限,就是 CDT 的 Error Parsers 是基于行的,但是 CMake 的错误,每一条都是分成三行来提供的,这就很麻烦了,无法把它们合并成一条错误。

我们回到Error Parsers 界面,下面有个 WorkSpace Settings 链接,打开它,我们可以创建一个 CMake Parser

全方位打造 Eclipse 自定义开发环境第5张

然后,你可以仿造其他的parser,创建 cmake 输出的分析器,比如如下两个规则

全方位打造 Eclipse 自定义开发环境第6张

在项目属性里选择这个parser,然后重新生成,看看输出是不是变颜色了?同时,Problem里也有了信息

全方位打造 Eclipse 自定义开发环境第7张

其中前两个就是我们刚刚分析出来的,是不是很简单?美中不足就是无法把这两条合并,可惜啊。。。

代码跳转

这个本来是非常基本的功能,ctrl+click 可以跳转到类声明,打开头文件等,可以说是非常基本实用的功能,但是我们使用了自己的编译器后,上述功能就失效了,不如你点击 iostream,状态栏里居然说无法这个文件。这是怎么回事呢?

其实,代码跳转这个功能,是 Eclipse Indexer 系统的一个子功能,包括代码重构,符号搜索,都是在这个系统里的。我们在编译程序时,需要指定头文件、库文件的搜索路径,Indexer同样需要知道这些信息。

使用 CDT 的标准项目时,这两个路径通过同一个地方指定,因此说,项目能够编译链接成功,Indexer也就能把符号表建立起来了,也就拥有了代码跳转、重构等功能。我们虽然不需要使用 CDT 的编译功能,但是为了 Indexer,上述路径还是要指定的。

在 项目属性中,打开 C/C++ General - Paths and Symbols - Includes 选项卡里,添加常用路径

全方位打造 Eclipse 自定义开发环境第8张

然后再试试代码跳转功能,oh yeah!

最后的战役 - 调试

其实这已经很简单了,和配置 Extern Tools 类似,把 可执行程序,工作路径,源代码搜索路径配置好就ok了,只是要把程序编译成 Debug 版本,否则 gdb 无法加载符号表——在 CMakeLists 中加入 SET( CMAKE_BUILD_TYPE Debug ) 选项 就可以了

至此,我们就建立起了一个完善的自定义工具开发环境,是不是比原来自带的项目模板还顺手?更多功能,还是需要你自己亲自摸索吧~~

免责声明:文章转载自《全方位打造 Eclipse 自定义开发环境》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自举(升压电路)Blazor带我重玩前端(五)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

gcc/g++编译

1. gcc/g++在执行编译工作的时候,总共需要4步 (1).预处理,生成.i的文件[预处理器cpp] (2).汇编,将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] (3).编译,将汇编语言文件编译为目标代码(机器代码)生成.o的文件[汇编器as] (4).链接,将目标代码,生成可执行程序[链接器ld] [参数详解]   -x lang...

顺利编译 binutiles-gcc-glibc

恩,前面一篇弃了,先知道怎么能成功,还有要避开哪些坑,然后再去仔细研究到底咋回事。 这里顺利编译 arm-lfs-linux-gnueabi , 参考了下面的资料: 1. 《Linux From ScratchVersion 7.3》 2. http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/...

测试覆盖率 Java 覆盖率 Jacoco 插桩的不同形式总结和踩坑记录

https://testerhome.com/topics/20632 关于Jacoco的小结和踩坑记录 一、概述 测试覆盖率,老生常谈的话题。因为我测试理论基础不是很好,就不提什么需求覆盖率啦这样那样的主题了,直奔主题,咱主要指Java后端的测试覆盖率。 由于历史原因,公司基本不做UT,所以对测试来说,咱最关心的还是手工执行、接口执行(人工Postman...

持续集成 TeamCity 的配置与使用

环境:实现自动编译与自动化测试,发布到远程服务器,环境 VS2015 +WIN2008R2 什么是TeamCityTeamCity是由Jetbrains开发的一款功能强大的持续集成(Continue Integration)工具,包括服务器端和客户端,目前支持Java,.Net 等项目开发。 TeamCity提供一系列特性可以让团队快速实现持续继承:IDE...

RK3399配置笔记

1. adb shell 默认超级管理员 在build/core/main.mk下将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1改成 ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0然后执行make bootimage重新生成 2.默认启用USB连接 在device/ro...

Android : apk签名的多种方法以及key的配置

  方法一:使用Android SDK中的签名工具给apk签名:   (1)Android源码的 build/target/product/security/ 目录下有 media.pk8、media.x509.pem、platform.pk8、platform.x509.pem、shared.pk8、shared.x509.pem、testkey.pk8...