分享

打造敏捷通用集成开发环境(一)The IDE of C 、C and Fortran

 oskycar 2012-08-20

一、前言

     集成开发环境(简称IDE Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。就是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套装。所有具备这一特性的软件或者软件套装都可以叫做集成开发环境。

     Windows下的Visual Studio、Delphi,Linux下的Eclipse都属于IDE。

     可能大家有个疑问,既然各个系统都有这些非常成熟的产品,为什么还要再搭配一个呢。众所周知,VS非常庞大,你可能只需要编译基础的C和C++,但是VS把MFC、.net一大堆的框架全都安装进你的系统,虽然VS的调试器还是不错的,不过他的代码编辑器非常不完善,通常还需要安装一大堆插件来完成代码编写。Delphi的Rapid开发不错,但也仅限于Object Pascal语言和VCL框架。Eclipse基于Java环境,也能for win32,插件也非常丰富,就是启动速度比较慢,而且他建立的每个工程,都需要编写makefile,熟悉Linux的可能对此非常欣赏,但对于用惯了VS的,都会产生一个抵触感。另外,使用Vim/gvim和Emacs也不错,能完成编写代码的大部分工作,调试也可以通过插件完成,不过配置相当麻烦,如果你需要很多语言混合编程的话,这个配置文件就够你受的。因此,需要找到一个IDE,以求避免这些缺点。

    Code::Blocks就是一个满足条件的IDE。Code::Blocks本身是一个开放源码的全功能的跨平台C/C++集成开发环境,可以通过插件来扩充自身的功能。

    由于他本身就是以开发C/C++为目标的,官网上相关的文档也非常丰富,再次不再赘述搭建C/C++的基本内容。

    FORTRAN,是英文“FORmula TRANslator”的缩写,译为“公式翻译器”,它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。Fortran语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。

    本来,Fortran是有个比较优秀的IDE的,即Compaq Visual Fortran,但是已经不再开发,也不支持最新的Fortran 2003之后的标准,对现在的CPU识别不佳,生成的代码效率比现在的流行的编译器要慢上不少。并且也缺少诸如代码提示、自动完成、变量导出等等对编写代码很有帮助的功能。此外,现在比较流行的Intel Visual Fortran也可以通过插件的形式嵌入Visual Studio 2008中,不过VS插件的代码提示、自动完成对Fortran语言无效,只能使Fortraner看着VS上的一大堆C/C++插件望眼欲穿。

    而Code::Blocks下有个专属于Fortran的插件FortranProject plugin,可以完成类似于VS下的Visual Assist插件的诸多功能,不过是针对Fortran语言的。

    下面就对Code::Blocks配置Fortran环境做个说明。

 

二、编译Code::Blocks

    如果要使用FortranProject plugin,需要Code::Blocks相同版本的sdk,为了方便起见,我们从头编译下Code::Blocks。

    编译Code::Blocks需要WxWidgetsgcc编译器,在此选择比较稳定的WxWidgets 2.8.11版和gcc 4.4.4(已经附带gfortran),下载后编译WxWidgets库(网上有关WxWidgets编译的内容很多,可以自行查阅)。

    另外,我们需要一个旧版本的Code::Blocks,和SVN上的最新源代码,命令为

svn checkout svn://svn.berlios.de/codeblocks/trunk 

   

    在Code::Blocks里新建wx和CB的全局变量,wx指向WxWidgets的位置,CB指向源代码目录下的src目录和include目录。

    打开src下的CodeBlocks.cbp的Code::Blocks工程,选Build All(之前可以调整优化参数),经过一段时间,Code::Blocks主体程序就会编译完成。

    再用Code::Blocks打开src目录下的ContribPlugins.workspace,选择Build Workspace编译CB的插件。

    执行完后,运行src\update.bat批处理,把WxWidgets生成的wxmsw28u_gcc_4.4.dll复制到src\output中,那么output里的最新SVN版的Code::Blocks就可以运行了。

 

三、编译FortranProject plugin

    去FortranProject plugin官网上下载最新的0.4版,这个版本比0.3版多出一个setting,这样就不用修改源代码来适应代码完成的延时了。

    使用上述编译完成的CB打开FortranProject plugin工程,选Build Project,编译完成后在其工程目录生成一个FortranProject.cbplugin插件文件,在CB里选择Plugins-Manage Plugins-install new,安装这个插件,这样FortranProject plugin就集成到CB里了。

    然后在CB里配置gfortran编译器和gdb调试器,这里省略。

   

四、FortranProject plugin的功能

    由于FortranProject plugin是在CB另一个插件Code Completion基础上修改的,两个插件有些冲突,编写Fortran程序时把Code Completion插件禁用。

1、代码高亮

image

2、变量名提示

image

image

3、关键字提示

image

4、函数形参提示

image

5、函数跳转

image 

6、变量和函数声明提示

image

7、列出程序里的函数

image

8、设置窗口

image

9、其他功能参照FortranProject plugin作者的说明。

 

五、完善Fortran IDE

1、加入Fortran的Console工程    

     配置完上述内容,编写编译调试都没有问题了,不过得新建一个empty工程,新建文件来进行Fortran程序的编写,能不能把CB的Console工程加入Fortran的支持呢?

     进入CB文件夹的\share\CodeBlocks\templates\wizard\console中,新建一个目录f90,在f90目录下新建一个main.f90的文件,内容按你自己的喜好,这里的内容为

!main.f90

program main
    implicit none

    write (*,*) "Hello world!"

    stop

end program

  

     更改wizard.script下面的语句

     把

Wizard.AddGenericSingleChoiceListPage(_T("ConsoleLanguagePage"),
           _T("Please select the language you want to use."),
           _T("C;C++"), ConsoleLang); // select language

     修改为

Wizard.AddGenericSingleChoiceListPage(_T("ConsoleLanguagePage"),
           _T("Please select the language you want to use."),
           _T("C;C++;f90"), ConsoleLang); // select language

    

     把

if (ConsoleLang == 0) // C source file
        result = _T("console/c");
    else // C++ source file
        result = _T("console/cpp");

     修改为

if (ConsoleLang == 0) // C source file
       result = _T("console/c");
   else if (ConsoleLang ==1)// C++ source file
       result = _T("console/cpp");
   else
       result = _T("console/f90");

   

    运行Code::Blocks,新建工程,选择Console application,

    image

    image         

          选择f90,再选择编译器,就会出现刚才编写的以main.f90为基础的Console工程。

          image 

2、格式化Fortran代码

     Code::Blocks自带Astyle的格式化代码功能,不过不支持Fortran,Fortran源码千万不要用Astyle格式化,否则会全部乱套。Fortran的格式化插件现在还没有,但是Vim的插件可以完成此功能,CB又支持外挂程序,通过vim进行后台的格式化代码操作是一个很好的途径。

     这里仅使用Vim的格式化代码功能,所以对Vim进行一下精简(未对Vim主程序UPX压缩前,1M多一点儿)。

     Vim格式化代码仅需要以下文件

     image     indent目录里只保留一个fortran.vim。

     script内容为

gg=G:x

     这是为了使用Vim的gg=G进行格式化的脚本。

     配置文件_vimrc添加以下内容

"打开对文件类型插件的支持
filetype plugin on
filetype plugin indent on

"设置制表符宽度,默认为
set tabstop=6
set cindent shiftwidth=6
set autoindent shiftwidth=6

"Fortran 语法
let fortran_more_precise=1
let fortran_do_enddo=1
let fortran_if_elseif_endif=1

"设置无备份文件
set writebackup
set nobackup

    把精简后的Vim放到CB程序目录里的Vim文件夹下。

    回到CB界面,选择Tools-Configure Tools,添加一个Code Format,进行编辑。

    配置如下:

    image 

    看看把一个打乱的代码如何格式化美观吧。

            program main
        implicit none
           real :: Myaaabbb
          Myaaabbb=1.
         call test(aaa,bbb)
         
                     if (aaa>1) then
                             write(*,*) "aaa>1"
                else
                                        write(*,*) "error"
                 endif      

write(*,*) Myaaabbb,ccc


stop

 end program

         subroutine test(aaa,bbb)
            implicit none
                    real :: aaa,bbb
            bbb=aaa*2.
                           end subroutine

    选择Tools-Code Format,CB会提示你文件更改,选择Yes,效果如下:

program main
    implicit none
    real :: Myaaabbb
    Myaaabbb=1.
    call test(aaa,bbb)

    if (aaa>1) then
        write(*,*) "aaa>1"
    else
        write(*,*) "error"
    endif

    write(*,*) Myaaabbb,ccc


    stop

end program

subroutine test(aaa,bbb)
    implicit none
    real :: aaa,bbb
    bbb=aaa*2.
end subroutine

 

六、后记

     Fortran的IDE至此就基本配置完毕,诸如编译器和调试器的配置请读者Google。如果想在新建工程里加入Fortran的其他工程,比如Lib、Dll等,可以参照上述修改Console的工程修改。

     此外,CB只支持gdb和cdb调试,而cdb不支持fortran符号,gdb对fortran的动态数组和module支持不佳,调试上有些苦恼。Intel的idb调试器对这个支持颇好,但是现在CB还不认idb的符号,所以debug时可以使用其他手段(输出看结果等)。idb嵌入VS的调试器也很好,我通过CB的外挂程序(连接VS里的idb)进行调试,一般的程序可以正常调试,如果存在module时老是发生错误,这个问题等解决后再在后文书写。

            Good luck!Welcome to the trip of Code::Blocks for fortran.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多