Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@KFTamang

CERNのROOTをJetBrainsのCLionで使うときの設定

More than 3 years have passed since last update.

背景

CERNが提供している解析ツールROOTを統合開発環境(IDE)で使いたい!と思ったのですが、日本語の情報がほとんどありません。誰かの参考になればと私の試行錯誤を残しておきます。クリスマス最高!!一番好きな休日です!!!

環境

OSはScientific Linux 6.8、ROOTはver 5.34です。
IDEは何がいいか調べてみたところJetBrainsのものがいいという記述を見たのでCLionの最新版2016.3を選びました。学生だとタダだし。

とりあえず試す

CLion用のディレクトリを用意して既存のコード(g++コンパイルで動作は確認済)を読み込んでみます。

ClionProjects/ROOTMacros/txt2Tree.cc:1:19: error: TROOT.h: そのようなファイルやディレクトリはありません

みたいなエラーが大量に吐き出されます。
これは-lmといったヘッダオプションなどを指定してないからです。

g++などのコンパイラでコンパイルするときには

root-config --libs --cflags

を実行することで、必要なヘッダなどのオプションが例えば

-L/home/root/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d \\
-lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore \\
-lThread -pthread -lm -ldl -rdynamic -pthread -m64 -I/home/root/include

のように得られます。その出力を張り付けるなり` `で囲むなりしてg++の実行時にオプションを指定してやればいいわけです。

しかしCLionはCMakeを使ってコンパイルをしています。
そしてCMakeはCMakeLists.txtを読み込んでオプションなどを指定します。
というわけでIntegrate ROOT into my project with CMakeを参考にCMakeLists.txtへオプションを追加していきましょう。

CMakeLists.txtの設定

基本的にはROOTはCMakeに対応しているのでfind_package()でROOTを読み込めば多くのオプションなどを自動で設定してくれます。
しかしここでIntegrate ROOT into my project with CMakeをそのまま参考にすると大きな落とし穴にハマります。
FindROOT.cmakeがCMake用の設定が書き込まれたファイルなのですが、これの位置はROOTのコンパイル方法によって異なります。
Configure/Makeを用いてコンパイルした場合は$ROOTSYS/etc/cmake/FindROOT.cmakeとなり、CMakeでコンパイルした場合は(多分)$ROOTSYS/FindROOT.cmakeとなります。
これをlistCMAKE_PREFIX_PATHに読み込めと書いてありますが前者の場合は

list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}/etc/cmake)

を追加するだけでは完全に読み込んでくれませんでした。Treeなどを読み込んでくれないためTTreeを使おうとするとリンクに失敗します。
そこで

list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{ROOTSYS}/etc/cmake)

とすることでちゃんとFindROOT.cmakeを読み込んでくれるようになります。

このあとに

find_package(ROOT REQUIRED COMPONENTS RIO Net)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${ROOT_INCLUDE_DIRS})#ヘッダファイル*.hを読み込み
set(SOURCE_FILES main.cc)
add_executable(ROOTMacro ${SOURCE_FILES})
target_link_libraries(ROOTMacro ${ROOT_LIBRARIES} )#ライブラリを指定

を追加することで実行可能となります。

ちなみに最初にヘッダファイルを読み込むときはCPU使用率が100%近くになり30秒ほどかかりました。

以上の手順で自分はCLionでの開発が可能になりました。CMakeコンパイルの場合は少し違うかもしれませんが、その場合は参考サイトがそのまま当てはまるのではないでしょうか。

最後にCMakeLists.txtの全体を掲載しておきます。

CMakeLists.txt

cmake_minimum_required(VERSION 3.6)
project(ROOTMacro)

set(CMAKE_CXX_STANDARD 11)

list(APPEND CMAKE_PREFIX_PATH  $ENV{ROOTSYS})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{ROOTSYS}/etc/cmake)

find_package(ROOT REQUIRED COMPONENTS RIO Net)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${ROOT_INCLUDE_DIRS})
set(SOURCE_FILES main.cc)

add_executable(ROOTMacro ${SOURCE_FILES})
target_link_libraries(ROOTMacro ${ROOT_LIBRARIES} )
2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
KFTamang

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?