g++ で正常にコンパイルされる C++ プログラム (main.cpp
およびさまざまなヘッダーと実装ファイルを使用) を作成しました。現在、Cern の ROOT ライブラリでコンパイルしようとしていますが、ROOT でファイルをコンパイルする方法を知っている唯一の方法は.L main.cpp
.
ROOT に複数のファイルを含めるにはどうすればよいですか?
g++ で正常にコンパイルされる C++ プログラム (main.cpp
およびさまざまなヘッダーと実装ファイルを使用) を作成しました。現在、Cern の ROOT ライブラリでコンパイルしようとしていますが、ROOT でファイルをコンパイルする方法を知っている唯一の方法は.L main.cpp
.
ROOT に複数のファイルを含めるにはどうすればよいですか?
ROOT を使用する最も信頼できる方法 (少なくとも歴史的にも現在も) は、最も単純な探索以外ではインタープリターを無視し、C++ プログラムを ROOT ライブラリに対して明示的にコンパイルすることです。たとえば、
g++ MySource.cc `root-config --libs --cflags` -o foo
単一のソースファイルから実行可能な「foo」をコンパイルします。そのヘルパー スクリプトの詳細については、「root-config --help」を実行してください。
複数ファイルのプログラム/ライブラリは、ROOT ライブラリとヘッダーを指すために必要な引数を指定する限り (そしてライブラリが実行時に LD_LIBRARY_PATH で利用できる場合)、特別なものではありません。必要に応じて、標準の C++ ガイドでその手順が説明されます。これも安全にメイクファイルに入れることができます。
私のお金では、これは CINT インタープリターで .L などのコマンドを使用するよりも簡単で信頼性が高いです。前回試したとき、実際には ACLiC は、指定されたソース ファイルの一時的な (マングルされた) バージョンに対してコンパイルしていたので、コンパイラからのエラー メッセージはほとんど役に立ちませんでした!
CMakeを使用して ROOT ベースのプロジェクトをコンパイルします。プロジェクト ディレクトリ proj/ があり、そこに src/ と bin/ が含まれている場合、各ディレクトリに 1 つずつ、合計 3 つの CMakeList.txt ファイルが必要になります。
メイン プロジェクト ディレクトリにある CMakeList.txt の簡単な例:
cmake_minimum_required(VERSION 2.6)
project (SOME_PROJ_NAME)
add_subdirectory(src)
add_subdirectory(bin)
src/ ディレクトリは、.h および .cxx プロジェクトを保持する場所です。ライブラリ ファイル。CMakeList.txt ファイルの例:
# get all the *.cxx filenames, to compile them into a lib
file(GLOB SOME_PROJ_LIB_SRCS "${PROJECT_SOURCE_DIR}/src/*.cxx")
# include ROOT library and include files
include_directories(/path/to/root/dir/include/dir)
link_directories(/path/to/root/dir/lib/dir)
# and compile src into a library
add_library(Proj_lib_name ${SOME_PROJ_LIB_SRCS})
# here, list the ROOT libraries you require
target_link_libraries(Proj_lib_name dl Core Cint RIO Net Hist Graf Graf3d Gpad Tree Rint Postscript Matrix Physics MathCore Thread Gui pthread m)
bin/ ディレクトリは、アプリの .cxx ファイルを保持する場所であり、CMakeList.txt ファイルがあります。
include_directories(${PROJECT_SOURCE_DIR}/src)
link_directories(${PROJECT_SOURCE_DIR}/src)
include_directories(/path/to/root/dir/include/dir)
link_directories(/path/to/root/dir/lib/dir)
add_executable(example_app.exe example_app.cxx)
target_link_libraries(example_app.exe Proj_lib_name dl Core Cint RIO Net Hist Graf Graf3d Gpad Tree Rint Postscript Matrix Physics MathCore Thread Gui pthread m)
最後に、ROOT ベースのコードをソースから CMake でコンパイルするには、最上位のプロジェクト ディレクトリに「ビルド」ディレクトリを作成します。ディレクトリ構造は次のようになります。
proj/
bin/
build/
src/
それで
cd build
cmake ..
バイナリは build/bin/ ディレクトリに配置されます
お役に立てれば。
ROOTに「ファイルの内容をメモリにロードする」ように指示する.L <filename>
ため、必要なファイルごとに単純に行うようです。.L
ただし、エラーが発生しているため、ファイルをロードする順序がよくわかりません。