0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

cmake管理配置ROOT项目的方法

Geant4模拟学习交流 来源:Geant4模拟学习交流 作者:Geant4模拟学习交流 2021-01-18 17:45 次阅读

ROOT作为使用C++开发的工具库,自然少不了cmake这个项目组织工具。本文简单介绍下cmake管理配置ROOT项目的方法,先上总图

d14bef10-58a7-11eb-8b86-12bb97331649.png

本项目有一个头文件,两个源文件以及一个cmake配置文件组成。

序号 文件名 文件说明
1 CMakeLists.txt Cmake配置文件,用于组织项目的编译需要的库、编译的过程、编译结果
2 CMakeLists.txt.user Qtcreator打开cmake项目时生成的用户缓存文件,可忽略
3 CMakeLists.txt.user.4825354

某个缓存文件的版本,可忽略

4 helloworld.h 头文件
5 helloworld.cpp 源文件
6 main.cpp 源文件的main函数

其中helloworld案例是一个简单的helloworld类。

main.cpp中的root部分来自于root自带的案例。

其中cmake配置文件内容如下

cmake_minimum_required(VERSION 3.5)

project(test_root01 LANGUAGES CXX VERSION 0.1.0)

include(CTest)

enable_testing()

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})

find_package(ROOT REQUIRED COMPONENTS MathCore RIO Hist Tree Net Graf Graf3d Gpad ROOTDataFrame Tree TreePlayer Rint )

include(${ROOT_USE_FILE})

include_directories(${CMAKE_SOURCE_DIR} ${ROOT_INCLUDE_DIRS})

add_definitions(${ROOT_CXX_FLAGS})

add_executable(${PROJECT_NAME} main.cpp helloworld.cpp)

target_link_libraries(${PROJECT_NAME} ${ROOT_LIBRARIES})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})

set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})

include(CPack)

下面逐行讲解

cmake_minimum_required(VERSION 3.5)

设定cmake最低版本要求

project(test_root01 LANGUAGES CXX VERSION 0.1.0)

定义项目名称为test_root01,使用的语言C++,本次项目的版本号0.1.0

include(CTest)

包含cmake的一个测试库,一般结合cppunit库使用,我用过的测试库是googletest。这个cppunit以后可以尝试。

enable_testing()

启用测试功能

set(CMAKE_CXX_STANDARD 11)

定义c++的标准为c++11

set(CMAKE_CXX_STANDARD_REQUIRED ON)

一般都写,ON代表强制使用新特性,这个没仔细研究过,抄上即可,有问题就注释咯。

list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})

将环境变量ROOTSYS字段对应的值赋给cmake搜索路径,便于找到ROOT有关的东东

find_package(ROOT REQUIRED COMPONENTS MathCore RIO Hist Tree Net Graf Graf3d Gpad ROOTDataFrame Tree TreePlayer Rint )

找到ROOT库,并且必须加载后面那一堆东东,其中Gpad好像画图必须用吧?

include(${ROOT_USE_FILE})

包含ROOT的一些变量配置文件?

include_directories(${CMAKE_SOURCE_DIR} ${ROOT_INCLUDE_DIRS})

包含一些ROOT的头文件目录

add_definitions(${ROOT_CXX_FLAGS})

添加ROOT的一些C++标志

add_executable(${PROJECT_NAME} main.cpp helloworld.cpp)

生成可执行文件,后面是源文件,其中必须 有个main函数

target_link_libraries(${PROJECT_NAME} ${ROOT_LIBRARIES})

链接ROOT的库文件到可执行文件

set(CPACK_PROJECT_NAME ${PROJECT_NAME})

设置cpack的一些信息,这里是名字,用于打包?

set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})

设置cpack的版本

include(CPack)

包含cpack的什么鬼?

可以看出来要配置好环境变量如下图

d192e6f4-58a7-11eb-8b86-12bb97331649.png

本质就是

source 你的ROOT安装路径/thisroot.sh

本文是一种老式的对开发ROOT项目进行cmake配置的方法,但是支持新版本,如果要想研究新的方法,可以参考如下链接

https://cliutils.gitlab.io/modern-cmake/chapters/packages/ROOT.html,链接如果没了,请参考下图自行查找

makefile用户喜欢的方法

http://ipnp.cz/scheirich/?page_id=178

源码链接如下,如果失效请点击《阅读原文》

https://gitee.com/qiangge_666/test_root01

责任编辑:xj

原文标题:CERN ROOT开发环境的cmake配置

文章出处:【微信公众号:Geant4模拟学习交流】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发环境
    +关注

    关注

    1

    文章

    203

    浏览量

    16460
  • CERN
    +关注

    关注

    0

    文章

    5

    浏览量

    8193
  • root
    +关注

    关注

    1

    文章

    82

    浏览量

    21236

原文标题:CERN ROOT开发环境的cmake配置

文章出处:【微信号:gh_361ab7628207,微信公众号:Geant4模拟学习交流】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问一下CMake和Make之间的区别有哪些?

    CMake和Make是构建软件,其工作涉及将源代码转换为可执行程序。CMake和Make是旨在实现构建过程自动化的工具,帮助开发者节省时间和精力。
    的头像 发表于 02-27 11:44 440次阅读

    Windows下编译工具CMake的安装和最简使用

    MCU的开发环境一般在Windows操作系统上,简单的工程一般直接编写Makefile文件后使用make工具构建程序,复杂的工程一般借助CMake来生成Makefile文件后使用make工程构建程序
    的头像 发表于 11-14 10:18 1564次阅读
    Windows下编译工具<b class='flag-5'>CMake</b>的安装和最简使用

    CMake构建后的项目结构解析

    Structure After CMake Build) CMake构建完成后,会在项目的根目录下生成一个名为build的目录。这个目录是CMake构建过程中所有中间文件和最终生成的
    的头像 发表于 11-10 10:27 401次阅读
    <b class='flag-5'>CMake</b>构建后的<b class='flag-5'>项目</b>结构解析

    在Linux下如何使用CMake编译程序

    CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置
    的头像 发表于 11-08 16:15 1637次阅读
    在Linux下如何使用<b class='flag-5'>CMake</b>编译程序

    跨平台编译工具cmake的简单使用

    在使用不同平台的电脑时,使用的编译也会不一样,如果想把一个项目在不同平台下编译,那有什么方式可以实现这样的需求呢,这就是这篇文章就来介绍其中的一种方式,就是使用cmakecmake 并不直接建构出最终的软件,而是产生标准的建构
    发表于 08-14 10:40 478次阅读
    跨平台编译工具<b class='flag-5'>cmake</b>的简单使用

    cmake是什么?cmake的特性和编译原理(cmake原理和cmake编译过程)

    CMake是一个开源、跨平台的工具系列,是用来构建、测试和打包软件。
    的头像 发表于 07-18 10:53 1854次阅读
    <b class='flag-5'>cmake</b>是什么?<b class='flag-5'>cmake</b>的特性和编译原理(<b class='flag-5'>cmake</b>原理和<b class='flag-5'>cmake</b>编译过程)

    RH850/F1KM 设备示例项目的智能配置器指南

    RH850/F1KM 设备示例项目的智能配置器指南
    发表于 07-05 18:57 0次下载
    RH850/F1KM 设备示例<b class='flag-5'>项目的</b>智能<b class='flag-5'>配置</b>器指南

    Springboot项目的集成以及具体使用及配置

    以及 Activity 等其他工作流 引擎的介绍及对比不再介绍,这里只介绍与现有Springboot项目的集成以及具体使用及配置 基于 Spring Boot + MyBatis Plus + Vue
    的头像 发表于 07-03 11:18 894次阅读
    Springboot<b class='flag-5'>项目的</b>集成以及具体使用及<b class='flag-5'>配置</b>

    Purple Pi OH Android11 ROOT方法

    为了让应用程序可以直接调用su执行系统命令和获取root权限,本文基于Purple Pi OH主板的Android SDK,介绍如果修改和编译一个root版本的Android11系统,以下为sdk源码修改方法
    的头像 发表于 06-30 14:59 414次阅读
    Purple Pi OH Android11 <b class='flag-5'>ROOT</b><b class='flag-5'>方法</b>

    RH850/U2B 设备示例项目的智能配置器指南

    RH850/U2B 设备示例项目的智能配置器指南
    发表于 06-29 19:19 1次下载
    RH850/U2B 设备示例<b class='flag-5'>项目的</b>智能<b class='flag-5'>配置</b>器指南

    Purple Pi OH Android11 ROOT方法

    为了让应用程序可以直接调用su执行系统命令和获取root权限,本文基于Purple Pi OH主板的Android SDK,介绍如果修改和编译一个root版本的Android11系统,以下为sdk源码修改方法
    的头像 发表于 06-25 09:49 478次阅读
    Purple Pi OH Android11 <b class='flag-5'>ROOT</b><b class='flag-5'>方法</b>

    为什么无法在MCUXpresso IDE中为导入的cmake项目设置LinkServer (CMSIS-DAP)调试?

    你好!我无法在 MCUXpresso IDE 中为导入的 cmake 项目设置 LinkServer (CMSIS-DAP) 调试。是否可以?我找不到任何解决方案。 细节: 我创建了简单
    发表于 05-29 08:01

    14. 在 CMake 中自定义宏___CMake 保姆级教程【C_C++】

    CMake
    jf_97106930
    发布于 :2023年05月19日 12:49:38

    3. CMake 中 set 的使用 - 上___CMake 保姆级教程【C_C++】

    CMake
    jf_97106930
    发布于 :2023年05月18日 15:39:48

    RH850/U2B 设备示例项目的智能配置器指南

    RH850/U2B 设备示例项目的智能配置器指南
    发表于 05-12 19:27 0次下载
    RH850/U2B 设备示例<b class='flag-5'>项目的</b>智能<b class='flag-5'>配置</b>器指南