打造敏捷通用集成开发环境(一)The IDE of C 、C++ and Fortran
一、前言
集成开发环境(简称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需要WxWidgets和gcc编译器,在此选择比较稳定的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官网上下载最新的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是在CB另一个插件Code Completion基础上修改的,两个插件有些冲突,编写Fortran程序时把Code Completion插件禁用。
1、代码高亮
2、变量名提示
3、关键字提示
4、函数形参提示
5、函数跳转
6、变量和函数声明提示
7、列出程序里的函数
8、设置窗口
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,
选择f90,再选择编译器,就会出现刚才编写的以main.f90为基础的Console工程。
2、格式化Fortran代码
Code::Blocks自带Astyle的格式化代码功能,不过不支持Fortran,Fortran源码千万不要用Astyle格式化,否则会全部乱套。Fortran的格式化插件现在还没有,但是Vim的插件可以完成此功能,CB又支持外挂程序,通过vim进行后台的格式化代码操作是一个很好的途径。
这里仅使用Vim的格式化代码功能,所以对Vim进行一下精简(未对Vim主程序UPX压缩前,1M多一点儿)。
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,进行编辑。
配置如下:
看看把一个打乱的代码如何格式化美观吧。
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.
作者:PcX
出处:http://www.cnblogs.com/xunxun1982/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。