4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-24

#背景
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} )
4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?