Tutorials:Alpsize-01 CMake/ja

From ALPS
Jump to: navigation, search

CMakeによるパッケージ化

プログラムのパッケージ化にはCMake (2.8以降)を使用します。CMakeはクロスプラットフォームなMakeユーティリティーで、cmake & makeでプログラムのコンパイルが可能になります。CMakeの動作は設定ファイルCMakeLists.txtによって制御します。ユーザ自身が直接Makefileを書くよりももはるかに容易にビルドがおこなえます。 次の図はパッケージ化の流れのイメージです。CMakeList.txtを編集してパッケージ化をおこないます。

パッケージ化の流れ

CMakeList.txtには、ヘッダ部、ALPS環境の読み込み、ターゲットとの依存関係の記述、および必要に応じてテストの記述等を行います。ALPSライブラリはCMake用の環境設定ファイル/opt/alps/share/alps/ALPSConfig.cmakeを用意しています。このファイルを読み込むことによりALPSビルドに必要な様々な変数を設定することができます。また、/opt/alps/share/alps/UseALPS.cmakeを読み込むことで、コンパイラの指定やリンカーのオプションなどの設定を行うことができます。以下にCMakeLists.txtの例を示します。完全なソースコードはtutorials/alpsize-01-cmake/にあります。

 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
 project(alpsize NONE)
 
 # find ALPS Library
 find_package(ALPS REQUIRED PATHS ${ALPS_ROOT_DIR} $ENV{ALPS_HOME} NO_SYSTEM_ENVIRONMENT_PATH)
 message(STATUS "Found ALPS: ${ALPS_ROOT_DIR} (revision: ${ALPS_VERSION})")
 include(${ALPS_USE_FILE})
 
 # enable C and C++ compilers
 enable_language(C CXX)
 
 # rule for generating 'hello world' program
 add_executable(hello hello.C)
 target_link_libraries(hello ${ALPS_LIBRARIES})
 add_alps_test(hello)

find_packageのNO_SYSTEM_ENVIRONMENT_PATHオプションに注意してください。コンパイラ等の環境変数はデフォルトの設定に上書きされます。

CMakeの実行

cmakeを実行に際しては、-DALPS_ROOT_DIRオプションでALPSへのパスを指定します。

$ cmake -DALPS_ROOT_DIR=/opt/alps /somewhere/to/your/source/code

あるいは、環境変数$ALPS_HOMEでALPSへのパスを指定することも可能です。

$ export ALPS_HOME=/opt/alps
$ cmake /somewhere/to/your/source/code
-- Found ALPS: ...
[snip]
-- Configuring done
-- Generating done
-- Build files have been written to: /home/alps/tutorial

CMakeにより、Makefileが生成されます。Makeを使って、プログラムをビルドし実行します。

$ make
[100%] Building CXX object CMakeFiles/hello.dir/hello.C.o
Linking CXX executable hello
[100%] Built target hello
$ ./hello
hello, world

CTestツールによりテストを実行します。CTestはhelloを実行し、その出力結果をhello.opの内容と比較します。

$ ctest
Test project /home/alps/tutorial
    Start 1: hello
1/1 Test #1: hello ............................   Passed    0.07 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) =   0.07 sec