zoukankan      html  css  js  c++  java
  • 全方位打造 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尽量少的给我们的项目加额外的配置参数。

    现在得到一个完全空白的项目,我们给他添加 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>
    using namespace std;
    
    int main()
    {
    	int sum=0;
    	for(int i=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

     ok。

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

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

    运行程序

    我们的 可执行程序 并不是输出在正常目录里,因此 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 加点错误。

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

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

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

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

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

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

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

    代码跳转

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

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

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

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

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

    最后的战役 - 调试

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

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

  • 相关阅读:
    算法题
    AIO和NIO的理解
    Redis面试考点
    对MVVM的理解
    Vuex状态管理模式
    vue 的computed 和 watch 两者的区别
    vue之组件通信
    vue生命周期钩子函数
    angularjs 运行时报错ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected. node_modules/rxjs/internal/types.d.ts(81,74): error TS1005: ';' expected. node_modules/rxjs/internal/t
    浅入不深出--vuex的简单使用
  • 原文地址:https://www.cnblogs.com/dabaopku/p/2346802.html
Copyright © 2011-2022 走看看