Difference between revisions of "Tutorials:Alpsize-01 CMake"
(Created page with "{{Languages|Tutorials: Alpsize-01_CMake}} ==Packaging with Cmake== To package the program is using CMake (version 2.8 or later). CMake is a cross-platform system for managing t…") |
|||
Line 1: | Line 1: | ||
− | {{Languages|Tutorials: Alpsize-01_CMake}} | + | {{Languages|Tutorials:Alpsize-01_CMake}} |
==Packaging with Cmake== | ==Packaging with Cmake== |
Latest revision as of 11:45, 1 May 2013
Languages: |
English • 日本語 (ja) • 繁體中文 (zh-tw) • 简体中文 (zh) |
Packaging with Cmake
To package the program is using CMake (version 2.8 or later). CMake is a cross-platform system for managing the build process of software. One can compile software using cmake & make with configure file CMakeLists.txt. It is generally much easier to write CMakeLists.txt than writing Makefile directly by hand. The following figure is an image of the flow of packaging. The packaging is done by editing CMakeList.txt.
CMakeList.txt consists of several parts: header, importing ALPS environment, description of target dependencies, and (if necessary) some tests.
The ALPS library provides an ALPS configuration file for CMake in /opt/alps/share/alps/ALPSConfig.cmake. Including that file will set all the configuration variables used when building ALPS. Additionally including the file /opt/alps/share/alps/UseALPS.cmake into your CMake file will automatically set the compiler and linker options to use ALPS. Here is an example CMakeLists.txt. A complete set of source codes will be found at 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)
Note that NO_SYSTEM_ENVIRONMENT_PATH option in find_package is essential. Otherwise, the variables (compilers, etc) will be overwritten by the system default ones.
Running CMake
When running cmake, one should specify the path where ALPS may be found by using -DALPS_ROOT_DIR option:
$ cmake -DALPS_ROOT_DIR=/opt/alps /somewhere/to/your/source/code
Or, one can tell the place of ALPS to cmake by using environmental variable $ALPS_HOME:
$ 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 will generate Makefile. Then, run make to build program:
$ make [100%] Building CXX object CMakeFiles/hello.dir/hello.C.o Linking CXX executable hello [100%] Built target hello $ ./hello hello, world
Run some tests by using CTest tool. CTest will runs hello, and compare its output with the contents of 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