Linux中用IDE编写GEANT4程序

目标

虽然在Linux下安装和运行GEANT4程序很便捷,但是windows下的Visual Studio和MAC下的xcode这样的Integrated Development Environment (IDE)为编写程序提供了代码补全、成员方法提示、声明查找、断点调试等功能,可以提高工作效率。

这篇文章将介绍如何在Linux使用IDE编辑和运行调试GEANT4代码,主要涉及两个软件:eclipsevs code,后者严格意义上并不是IDE,但是容易配置出上述功能。

eclipse CDT

eclipse 是跨平台的IDE,默认是用来开发JAVA程序的,CDT是用于C/C++开发的分支。这里的思路是,GEANT4通过cmake进行代码配置管理,而cmake支持生成不同IDE的工程文件(例如:visual studio的.sln工程),其中就包括eclipse的工程文件生成。最后导入即可。

相同的方法还可以用于以下跨平台的IDE(未经测试):

安装软件

在安装之前,确保系统中有JAVA的运行环境(通常系统都会自带)。

方法1: 使用ubuntu官方软件源中的eclipse cdt(版本较旧)

打开synaptic,搜索eclipse-cdt,标记安装。或者在控制台中运行:

sudo apt-get install eclipse-cdt  

方法2: 在官网下载,解压后即可运行

  1. 这个页面下载对应系统(Linux 64-bit)的压缩包;
  2. 解压到某个路径,例如:/home/tom/softwares/eclipse;
  3. 直接运行解压后的可执行文件eclipse
  4. (可选)在启动脚本(~/.bashrc)中,添加该路径到PATHexport PATH=$PATH:/home/tom/softwares/eclipse

由CMake创建工程

Online wiki

这里以B1为例,首先将它拷贝到某个文件夹,然后创建一个跟它同级的空文件夹(例如,叫做B1_build)。

如果像之前一样把build文件夹放在源代码文件夹里面,会出现Warning

.
├── B1
└── B1_build

在B1_build文件夹里,执行:

cmake -G"Eclipse CDT4 - Unix Makefiles" ../B1  

在eclipse中导入项目

  1. 打开软件,推荐在控制台输入指令打开:<where-eclipse-was-extracted>/eclipse或者eclipse(如果已经加入PATH),这样可以保证GEANT4相关的环境变量在打开eclipse的时候已经设置完毕。

  2. File -> Import菜单栏打开导入窗口;

  3. 在导入窗口中,选择General -> Existing Projects into Workspace,点击Next

  4. 新窗口中,点击Browse,选择刚才生成的工程文件目录B1_build

  1. 导入完毕后,左侧的Project Explorer树状结构里的[Source Directory],可以对当前代码进行修改。

使用eclipse编译运行程序

右键Project Explorer树状结构里Build Targets[exe]exampleB1,选择build target,就会开始编译链接程序。

如果一切正常,Explorer里会多几个Binary目录,选中其中的exampleB1,点击菜单中的Run -> Run就可以运行了。

使用eclipse进行调试

首先,需要安装gdb(全名:GNU Debugger)

sudo apt-get install gdb  

设置断点,然后对上一步生成的可执行程序exampleB1,点击菜单中的Run -> Debug就可以进入调试模式。具体使用方法跟其他IDE无异。

Visual Studio Code

这是微软良心出品的开源文本编辑器,加上官方的C/C++插件,可以媲美勉强替代臃肿的Visual Studio IDE。

安装

貌似Ubuntu官方源里面没有它(存疑?),直接到官网下载.deb包,双击安装即可。

配置插件

打开VS code之后,点击左侧边栏的extensions按钮,然后搜索并安装以下两个插件:

  • C/C++, from Microsoft
  • cmake, from twxs

重启VS code,让插件自动配置完成。

配置GEANT4程序

File -> Open Folder 打开拷贝出来的例子B1文件夹。这时候会提示很多头文件未找到,例如:

cannot open source file "G4RunManager.hh"  

点击报错语句前的“小灯泡”,选择Edit includePath Setting,这时会打开c_cpp_properties.json文件,修改其中的"name": "Linux",部分设定:

...
        {
            "name": "Linux",
            "includePath": [
                "/usr/include/c++/7.2.0",
                "/usr/include/c++/7.2.0/x86_64-pc-linux-gnu",
                "/usr/local/include",
                "/usr/lib/clang/5.0.0/include",
                "/usr/include",
                "${workspaceRoot}",
                "${workspaceRoot}/include",
                "<path-to-your-geant4-install>/include/Geant4"
            ],
            "defines": [],
            ...
        },
...

其中,我们只添加了includePath里的这两行:

                "${workspaceRoot}/include",
                "<path-to-your-geant4-install>/include/Geant4"

此时,应该就不会再报错了。(除非你使用了其他外部头文件,请将其继续添加到includePath

编译运行程序

还可以通过VS code编译运行程序,但是需要继续配置tasks.json文件,其实跟用命令行编译链接复杂度相似,这里不推荐这么干。