IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> CMake学习|逐行翻译Geant4的CMakeLists.txt -> 正文阅读

[C++知识库]CMake学习|逐行翻译Geant4的CMakeLists.txt

Geant4例子的代码结构一般为:

-example
    -example.cc
    -src
    -include
    -CMakeLists.txt
    -*.mac/*.in

其中example.cc是main()所在的主文件,src是源文件所在目录,include是头文件所在目录,CMakeLists.txt是cmake脚本,*.mac/*.in是宏命令文件。

首先,在Geant4的安装目录下"_install\lib\Geant4-版本号\Geant4Config.cmake"定义了一些CMake变量,在每一个例子的CMakeLists.txt中的 "find_package"命令执行时被获得。当该命令执行后,它会设置几个CMake变量,并提供一种机制来检查和激活Geant4的可选特性。这将允许在自己CMake项目中以多种方式使用它来配置Geant4以供你的应用使用。

其中最基本的是定位Geant4,采用以下命令:

# 如果只是定位,则不加任何后缀
find_package(Geant4)

# 如果必须找到Geant4,则使用如下命令
find_package(Geant4 REQUIRED)

当Geant4的安装目录找到后,以下CMake变量便可在项目的其他地方进行使用:

  · Geant4_FOUND
    如果找到Geant4的安装,则将该CMake bool变量设置为true

  · Geant4_INCLUDE_DIRS
    为包含Geant4所需头文件列表的目录

  · Geant4_LIBRARIES
    使用Geant4时需要链接到的库列表目录

  · Geant4_CXX_FLAGS
    用于构建Geant4安装的编译器标志,通常在Windows平台上是最重要的

  · Geant4_CXX_FLAGS_<CONFIG>
    在CONFIG模式下(比如,Release,Debug等)编译Geant4和应用时的编译器标志

  · Geant4_CXXSTD
    c++标准,例如"c++11",Geant4的安装是根据它编译的

  · Geant4_TLS_MODEL
    线程本地存储模型,如"initial-exec",仅在使用多线程支持编译安装时设置

  · Geant4_USE_FILE
    一个可以自动处理某些CMake步骤的CMake脚本,对于基本应用程序十分实用

  · and so on 
    可以参见G4用户手册

让我们来剖析这样一个Geant4的CMakeLists.txt

#-第一步----------------------------------------------------------------------
# 设置项目名称为:dnaphysics
#
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(dnaphysics)

#-第二步----------------------------------------------------------------------
# 找到Geant4安装目录,即Geant4Config.cmake所在目录
#
option(WITH_GEANT4_VIS "Build example with Geant4 Vis drivers" ON)
if(WITH_GEANT4_VIS)
  find_package(Geant4 REQUIRED vis_all)
else()
  find_package(Geant4 REQUIRED)
endif()

#-第三步----------------------------------------------------------------------
# 自动配置Geant4头文件
#
include(${Geant4_USE_FILE})

#-第四步----------------------------------------------------------------------
# 定位项目的源文件和头文件
#
# 将用户自定义头文件和Geant4头文件一并添加到头文件目录,即-I路径
#
include_directories(${PROJECT_SOURCE_DIR}/include 
                    ${Geant4_INCLUDE_DIR})
#
# 将用户自定义源文件,即/src目录下的*.cc文件一并添加到CMake全局变量sources中
#
file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
#
# 将用户自定义头文件,即/include目录下的*.hh文件一并添加到CMake全局变量headers中
#
file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)

#-第五步----------------------------------------------------------------------
# 添加可执行文件,并链接到Geant4的库
#
# 将目录下的main()文件,即dnaphysics.cc、源文件和头文件一并添加到可执行文件dnaphysics中
#
add_executable(dnaphysics dnaphysics.cc ${sources} ${headers})
#
# 将可执行文件dnaphysics链接到Geant4库
#
target_link_libraries(dnaphysics ${Geant4_LIBRARIES} )

#-第六步----------------------------------------------------------------------
# 复制所有脚本到build目录,因为可执行文件依赖于一些宏命令等,拷贝后可直接运行
#
# 将目录下以*.mac、*.in和*.C结尾的文件添加到全局变量MAC_FILES中
#
file(GLOB MAC_FILES ${PROJECT_SOURCE_DIR}/*.mac 
     ${PROJECT_SOURCE_DIR}/*.in
     ${PROJECT_SOURCE_DIR}/*.C)
#
# 遍历MAC_FILES
# 
# 将遍历到的文件路径${_script}拷贝到指定路径${PROJECT_BINARY_DIR}/. 并执行指定操作
# 这里的操作是只复制:COPYONLY
#
foreach(_script ${MAC_FILES})
  configure_file(
    ${_script}
    ${PROJECT_BINARY_DIR}/.
    COPYONLY
    )
endforeach()

#-第七步----------------------------------------------------------------------
# 将可执行二进制文件dnaphysics安装到'bin'目录
#
install(TARGETS dnaphysics DESTINATION bin)

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:08:08  更:2022-04-01 23:08:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:08:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码