3

g++ で正常にコンパイルされる C++ プログラム (main.cppおよびさまざまなヘッダーと実装ファイルを使用) を作成しました。現在、Cern の ROOT ライブラリでコンパイルしようとしていますが、ROOT でファイルをコンパイルする方法を知っている唯一の方法は.L main.cpp.

ROOT に複数のファイルを含めるにはどうすればよいですか?

4

3 に答える 3

6

ROOT を使用する最も信頼できる方法 (少なくとも歴史的にも現在も) は、最も単純な探索以外ではインタープリターを無視し、C++ プログラムを ROOT ライブラリに対して明示的にコンパイルすることです。たとえば、

g++ MySource.cc `root-config --libs --cflags` -o foo

単一のソースファイルから実行可能な「foo」をコンパイルします。そのヘルパー スクリプトの詳細については、「root-config --help」を実行してください。

複数ファイルのプログラム/ライブラリは、ROOT ライブラリとヘッダーを指すために必要な引数を指定する限り (そしてライブラリが実行時に LD_LIBRARY_PATH で利用できる場合)、特別なものではありません。必要に応じて、標準の C++ ガイドでその手順が説明されます。これも安全にメイクファイルに入れることができます。

私のお金では、これは CINT インタープリターで .L などのコマンドを使用するよりも簡単で信頼性が高いです。前回試したとき、実際には ACLiC は、指定されたソース ファイルの一時的な (マングルされた) バージョンに対してコンパイルしていたので、コンパイラからのエラー メッセージはほとんど役に立ちませんでした!

于 2011-12-12T18:12:54.270 に答える
3

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/ ディレクトリに配置されます

お役に立てれば。

于 2013-11-22T18:57:59.503 に答える
0

ROOTに「ファイルの内容をメモリにロードする」ように指示する.L <filename>ため、必要なファイルごとに単純に行うようです。.Lただし、エラーが発生しているため、ファイルをロードする順序がよくわかりません。

于 2011-10-26T06:43:18.770 に答える