Difference between revisions of "Tutorials:Alpsize-01 CMake/ja"

From ALPS
Jump to: navigation, search
(Created page with "{{Languages|Tutorials: Alpsize-01_CMake}} =Cmakeによるパッケージ化= プログラムのパッケージ化にはcmake(2.8以降)を使用します。cmakeはクロスプ…")
 
Line 1: Line 1:
 
{{Languages|Tutorials: Alpsize-01_CMake}}
 
{{Languages|Tutorials: Alpsize-01_CMake}}
  
=Cmakeによるパッケージ化=
+
=CMakeによるパッケージ化=
  
プログラムのパッケージ化にはcmake(2.8以降)を使用します。cmakeはクロスプラットフォームなMakeユーティリティーで、cmake & makeでプログラムのコンパイルが可能になります。設定ファイルCMakeLists.txtによって完全に制御されます。ユーザ自身が直接Makefileを書くよりももはるかに容易にビルドがおこなえます。
+
プログラムのパッケージ化にはCMake (2.8以降)を使用します。CMakeはクロスプラットフォームなMakeユーティリティーで、cmake & makeでプログラムのコンパイルが可能になります。CMakeの動作は設定ファイルCMakeLists.txtによって制御します。ユーザ自身が直接Makefileを書くよりももはるかに容易にビルドがおこなえます。
 
次の図はパッケージ化の流れのイメージです。CMakeList.txtを編集してパッケージ化をおこないます。
 
次の図はパッケージ化の流れのイメージです。CMakeList.txtを編集してパッケージ化をおこないます。
  
 
[[File:cmake1.png|500px|パッケージ化の流れ]]
 
[[File:cmake1.png|500px|パッケージ化の流れ]]
  
CMakeList.txtには、ヘッダ部、ALPS環境の読み込み、ターゲットとの依存関係の記述、および必要に応じてテストの記述等を行います。ALPSライブラリはCMake用の環境設定ファイル/opt/alps/share/alps/ALPSConfig.cmakeを用意しています。このファイルを読み込むことによりALPSビルドに必要な様々な変数を設定することができます。また、/opt/alps/share/alps/UseALPS.cmakeを読み込むことで、コンパイラの指定やリンカーのオプションなどの設定を行うことができます。以下にCMakeLists.txtの例を示します。完全なソースコードは[[[https://alps.comp-phys.org/svn/alps1/trunk/alps/tutorials/alpsize-01-cmake/ tutorials/alpsize-01-cmake/]]]にあります。  
+
CMakeList.txtには、ヘッダ部、ALPS環境の読み込み、ターゲットとの依存関係の記述、および必要に応じてテストの記述等を行います。ALPSライブラリはCMake用の環境設定ファイル/opt/alps/share/alps/ALPSConfig.cmakeを用意しています。このファイルを読み込むことによりALPSビルドに必要な様々な変数を設定することができます。また、/opt/alps/share/alps/UseALPS.cmakeを読み込むことで、コンパイラの指定やリンカーのオプションなどの設定を行うことができます。以下に[https://alps.comp-phys.org/svn/alps1/trunk/alps/tutorials/alpsize-01-cmake/CMakeLists.txt CMakeLists.txt]の例を示します。完全なソースコードは[https://alps.comp-phys.org/svn/alps1/trunk/alps/tutorials/alpsize-01-cmake/ tutorials/alpsize-01-cmake/]にあります。  
  
 
   cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
 
   cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
Line 28: Line 28:
 
find_packageのNO_SYSTEM_ENVIRONMENT_PATHオプションに注意してください。コンパイラ等の環境変数はデフォルトの設定に上書きされます。
 
find_packageのNO_SYSTEM_ENVIRONMENT_PATHオプションに注意してください。コンパイラ等の環境変数はデフォルトの設定に上書きされます。
  
'''CMakeの実行'''
+
=== CMakeの実行 ===
  
 
cmakeを実行に際しては、-DALPS_ROOT_DIRオプションでALPSへのパスを指定します。
 
cmakeを実行に際しては、-DALPS_ROOT_DIRオプションでALPSへのパスを指定します。
  
  cmake -DALPS_ROOT_DIR=/opt/alps /somewhere/to/your/source/code
+
$ cmake -DALPS_ROOT_DIR=/opt/alps /somewhere/to/your/source/code
  
 
あるいは、環境変数$ALPS_HOMEでALPSへのパスを指定することも可能です。
 
あるいは、環境変数$ALPS_HOMEでALPSへのパスを指定することも可能です。
  
  export ALPS_HOME=/opt/alps
+
$ export ALPS_HOME=/opt/alps
  cmake /somewhere/to/your/source/code
+
$ 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

Revision as of 11:32, 1 May 2013

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