C++/프레임워크&라이브러리(Framework&Library)

CMake로 Root 프로젝트 설정하기

kim선달 2020. 4. 30. 23:45
Select Language

https://root.cern/

 

ROOT a Data analysis Framework | ROOT a Data analysis Framework

 

root.cern

ROOT야 말로 진짜 빅 데이터를 다루는 프로그래밍 툴입니다. 저도 기억은 잘 안나는데 천공카드 시절부터 코딩을 하신 저희과 물리학 교수님께 들은바에 의하면 유럽입자물리연구소(CERN) 에서 수십년전에 개발한 과학용 툴로, 실험 한번에 수십 페타바이트 이상 생기는 데이터를 처리하고, 이를 정리하는 그래프 등을 시각화하는데 쓰이고 있다고 하네요. 아직도 CERN에서 발표하는 자료의 표나 그래프들은 ROOT를 이용하여 그린다고 합니다.

 

각설하고 이를 CMake를 이용해서 사용하는법을 소개하겠습니다.

 

1. github 

https://github.com/root-project/root

 

root-project/root

The official repository for ROOT: analyzing, storing and visualizing big data, scientifically - root-project/root

github.com

ROOT의 github 에 들어가서 README에 적힌대로 따라하면 됩니다. 참 쉽죠? 그러나 저에게는 복병이 있었으니..

 

아니 이게 뭐시당가? master branch 가 오염된건가..

 

 

2. Download Sourcefile

https://root.cern/download/

 

Index of /download

 

root.cern

여기 들어가서 해당하는 운영체제/버전에 맞는 파일을 찾으면 됩니다. 저같은 경우는 맥북을 사용하고 있어서

root_v6.19.02.macosx64-10.15-clang110.pkg

이었습니다.

 

설치 후 Window 유저는 root/bin/root.exe 로 실행하면 되고, .sh쉘 OS는 source root/bin/thisroot.sh 를 입력하면 root 입력시 root가 켜집니다.

.profile 이나 .bashrc파일에 미리 입력해놓는게 편합니다.

.csh쉘 OS는 source root/bin/thisroot.csh 입니다.

 

 

3. CMakeLists.txt 로 빌드하기

root 6.15 버전부터 최신 CMakeLists 변수들을 지원해준다는군요. 아래처럼 해주기만 하면 끝입니다.

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.15) // 설치된 버전으로 맞춰주시면 됩니다
project(cern_root)

set(CMAKE_CXX_STANDARD 14) // 사용하실 C++ 버전 

find_package(ROOT 6.19 REQUIRED)

add_executable(cern_root main.cpp)

target_link_libraries(cern_root PUBLIC
        ROOT::Core
        ROOT::Imt
        ROOT::RIO
        ROOT::Net
        ROOT::Hist
        ROOT::Graf
        ROOT::Graf3d
        ROOT::Gpad
        ROOT::ROOTVecOps
        ROOT::Tree
        ROOT::TreePlayer
        ROOT::Rint
        ROOT::Postscript
        ROOT::Matrix
        ROOT::Physics
        ROOT::MathCore
        ROOT::Thread
        ROOT::MultiProc
        ROOT::ROOTDataFrame)

 

이제 실행되는지 한번 봅시다

main.cpp

#include <iostream>
#include "TRandom3.h"
#include "TCanvas.h"
#include "TApplication.h"
#include "TH2.h"

int main(int argc, char** argv) {
    
    TApplication *app = new TApplication("app", &argc, argv);
    TCanvas* c1 = new TCanvas("c1","c1");
    TRandom3* random3 = new TRandom3(0);
    TH2D* hist2d = new TH2D(
        "Hist", "Gaus Distribution",
        100, -100, 100,
        100, -100, 100);
    
    for(int i=0; i<10000; ++i) {
        double x = random3->Gaus(0, 20);
        double y = random3->Gaus(0, 40);
        hist2d->Fill(x, y);
    }
    
    c1->cd();
    hist2d->Draw("LEGO");
    
    // Mac OS 에서는 아래 2개 명령어를 무조건 추가해줘야 그래프가 표시됩니다
    c1->Update();
    app->Run();
    
    return 0;
}

 

잘 나오는군요. 완성입니다.