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

    文章

    276

    浏览量

    17704
  • CERN
    +关注

    关注

    0

    文章

    5

    浏览量

    8370
  • root
    +关注

    关注

    1

    文章

    87

    浏览量

    22198

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    非标机械设备行业,为什么要项目管理

    要等到月底才能出成本,管理层想随时调取数据,财务比较难,同时工作量非常大! 有些项目的金额还很大,比如一条流水线,多个工位,算下来2千多万,若没有一个管控的体系,很多问题很难及时解决,造成项目的利润
    发表于 04-30 09:48

    在生产环境共享root账号的安全风险分析

    在 Linux 运维工作中,有一个现象至今仍然非常普遍:生产服务器上只有一个 root 账号,所有运维人员都使用这个账号登录和操作。理由通常是"方便"——不用创建多个账号,不用配置 sudo,不用记住多个密码。
    的头像 发表于 04-22 10:36 355次阅读

    S32DS IDE:CMake项目,使用 PE 进行 ELF 文件调试时,它没有按预期工作,为什么?

    ELF 文件调试时,它没有按预期工作,例如 Step over 和 Step 返回函数。 这是我正在使用的 CMake 项目配置 compilecfg.cmake
    发表于 04-16 11:14

    如何在 STM32Cube CMake 工程中添加源文件

    STM32CubeMX 能够很方便的导出 CMake 工程。例如,如下图所示在 STM32CubeMX的 ToolChain/IDE 中选择 CmakeCMake 工程可以很容易被
    发表于 04-15 16:07 0次下载

    使用CMake+VSCode环境移植ThreadX到极海G32R501 MCU

    我本人是 cmake+vscode 组合的忠实用户,之前写了一篇文章介绍了在 cmake+vscode 环境下开发 G32R501 的一些实践经验。这篇文章准备更进一步:移植一个ThreadX。
    的头像 发表于 03-09 14:04 2847次阅读
    使用<b class='flag-5'>CMake</b>+VSCode环境移植ThreadX到极海G32R501 MCU

    海康威视成功入选2025年度应急管理装备孵化项目

    近日,应急管理部办公厅、工业和信息化部办公厅、国务院国资委办公厅联合印发《关于公布2025年度应急管理装备孵化入选项目的通知》(应急厅函〔2025〕468号),正式公布本年度全国应急管理
    的头像 发表于 01-22 17:27 1463次阅读

    ESP32 编译过程中 bootloader 配置阶段的 CMake 缓存冲突错误,记录

    : 1. 彻底清理编译缓存(最关键) 首先删除项目的 build 目录,这是解决 CMake 缓存冲突最直接有效的方法: # 进入你的项目目录 cd F:\\\\xiaozhi-esp
    发表于 12-23 07:07

    ESP32-S3 工具链+环境配置的最终步骤清单

    、Ninja、CMake路径)已加载。 步骤3:验证工具链是否配置成功 在 export.bat 运行后的终端中,执行以下命令: # 验证 ESP32-S3 编译器
    发表于 11-26 07:36

    CubeMX 生成的 RTT 项目无法通过 cmake 编译怎么解决?

    在 CubeMX V6.13.0 版本上配置CMake 工程无法通过编译,报错如下图
    发表于 10-11 15:04

    【CPKCOR-RA8D1】1、VSCODE+CMAKE开发环境搭建

    Configurator是为不使用e2 studio的用户而专门设计的图形配置工具,可以生成MDK,IAR或是CMAKE工程。 3、安装VSCODE扩展Renesas Platform 安装了Renesas
    发表于 10-09 16:17

    如何选择适合自己项目的通信协议评估工具?

    LZ-DZ200电能质量在线监测装置 选择适合项目的通信协议评估工具,核心是 对齐项目需求与工具能力 ,避免 “过度选型”(用高端工具测简单场景)或 “功能不足”(用轻量工具测复杂协议)。以下是分步
    的头像 发表于 08-27 09:19 1014次阅读
    如何选择适合自己<b class='flag-5'>项目的</b>通信协议评估工具?

    SEGGER工具链集成到CMake和VS Code了

    SEGGER公司已将其嵌入式开发工具链集成到了广泛使用的CMake构建配置工具中,这意味着基于Visual Studio Code(VS Code)代码编辑器的应用开发可以方便的使用SEGGER工具实现了。
    的头像 发表于 07-23 15:06 1269次阅读

    基于LockAI视觉识别模块:C++人脸识别

    ) set(CMAKE_CXX_STANDARD_REQUIRED ON) ​ # 定义项目根目录路径 set(PROJECT_ROOT_PATH \"
    发表于 07-01 12:01

    基于LockAI视觉识别模块:手写数字识别

    (CMAKE_CXX_STANDARD_REQUIRED ON) ​ # 定义项目根目录路径 set(PROJECT_ROOT_PATH \"${CMAKE_CURRENT_SOURC
    发表于 06-30 16:45

    基于LockAI视觉识别模块:C++条码识别

    (CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) ​ # 定义项目根目录路径 set(PROJECT_ROOT_P
    发表于 05-27 10:26