ROOT作为使用C++开发的工具库,自然少不了cmake这个项目组织工具。本文简单介绍下cmake管理配置ROOT项目的方法,先上总图
本项目有一个头文件,两个源文件以及一个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的什么鬼?
可以看出来要配置好环境变量如下图
本质就是
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模拟学习交流】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !