View
1.646
Download
4
Category
Preview:
DESCRIPTION
CMakeとはどんなもので、他のビルドツール(MakeやAutotoolsなど)と比べてどんな利点があるのかについて、初めて知る人を想定した解説です。NSEG第24回白馬合宿(2012年2月11日)の発表資料。
Citation preview
Cross Platform Makeながぬまたつみ
CMake知ってますか?
● 自分のプロダクトで使っている● 誰かのプロダクトをビルドするときに
使ったことがある● 聞いた事ならある● まあ、よく食べるよ
CMake知ってますか?
Cakeではありません
CMake
make使っていますか
alias kachi = 'make'
Hello World (Unix)
$ vi hello.c#include <stdio.h>int main(void) { printf("Hello, world!\n"); }$ gcc hello.c -o hello$ ./helloHello, world!
make Hello World
$ lsMakefile hello.c$ makegcc hello.c -o hello$ lsMakefile hello.c hello
で、Windowsは?
Visual Studio 2010でプロジェクトを作ってビルド。 コードは同じ。
で、Eclipse(CDT)は?
プロジェクトを作ってビルド。 コードは同じ。
で、
● Borland C++ は?● MinGW は?● Visual Studio 2008 は?● Visual Studio 2005 は?● Visual Studio .NET 2003 は?● Visual Studio .NET は?● Visual Studio 6.0 は?● Mac は?
みんなどうしてるの?
● Google Chrome● VirtualBox● KDE● MySQL
クロスプラットフォームアプリケーション
● OpenCV● LLVM● Scribus
Autotools...? (GNU build system)
$ ./configure$ make
CMake !
$ mkdir build && cd build$ cmake ..$ make
CMake 概要
CMakeLists.txt
CMake
Unix MakefileMinGW MakefileNMake MakefileVisual Studio (.prj)Eclipse (.project)
CMakeによるビルド
$ mkdir build && cd buildビルド用のディレクトリ
生成物はすべてここに置かれる
$ cmake ..CMakeLists.txtの場所を参照
Makefileが生成される
$ make
CMakeのいいところ #1
ソースファイルのある場所を汚さない
$ mkdir build && cd build$ cmake ..$ make$ cd .. && rm -rf build
もとどおり。
CMakeのいいところ #2
CMakeLists.txtがかんたん
project(HelloWorld)add_executable(hello hello.c)
これだけ。たった2行。しかもわかりやすい。
CMakeLists.txt
文法が超簡単
コマンド(【引数1】【引数2】 ...) これだけ。
CMakeのいいところ #3
マルチプラットフォーム対応
先ほどのHelloWorldは...Windows、Linux、MacOS X、FreeBSD、IRIX、AIX、Sun OS、HP-UX
などに対応。
CMakeのいいところ #4
マルチIDE対応
先ほどのHelloWorldは...GNU Make、NMake、Watcom WMake、Visual Studio (6〜11)、ClodeBlocks、Eclipse CDT
などに対応。
CMakeのいいところ #5
ライブラリのリンクが簡単
find_package (Boost)include_directories (${Boost_INCLUDE_DIR})add_executable (foo foo.c)target_link_libraries (foo ${Boost_LIBRARIES})
CMakeのいいところ #6
オプションの指定がGUIでできる。
● cmake (コマンドライン)● cursesベースのccmake● Qtベースのcmake-gui● どれでも同じことができる
ccmake
cmake-gui
CMakeのいいところ #n
それだけではない。
CPack
インストーラーの作成。
● NSIS (Windows Installer)● Deb / RPM / tgz● MacOS X DragNDrop /
PackageMaker
CPack (Debの例)
project (Hello)add_executable (hello hello.c)install (TARGETS hello DESTINATION bin)set (CPACK_GENERATOR "DEB")set (CPACK_DEBIAN_PACKAGE_MAINTAINER
"Naganuma Tatsumi") #requiredinclude (CPack)
CTest
● テストケースの実行(全体・個別)● テスト結果の管理
CDash
● WebベースのCIツール● テスト結果の表示● 履歴やビルド状況などの表示
お好みでどうぞ
● それぞれ独立して動作する● 組み合わせても、組み合わせなくても
OK
まとめ
● gccコマンドの代わりにcmakeを● Makefileの代わりにCMakeLists.txtを● ツールを使ってさらに便利に
○ CPack / CTest● CUIとGUIでオプション指定
○ cmake / ccmake / cmake-gui
find_package
FindXXX.cmakeが呼び出される
自分で 〜.cmake を作ることもできる
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} 自分のモジュールがあるパス)
よく使う変数
● CMAKE_SOURCE_DIR● CMAKE_CURRENT_SOURCE_DIR● CMAKE_BINARY_DIR● CMAKE_C_FLAGS● CMAKE_CXX_FLAGShttp://www.cmake.org/cmake/help/cmake-2-8-docs.html#section_Commands
よく使うコマンド
● ADD_EXECUTABLE / ADD_LIBRARY● MESSAGE● INCLUDE_DIRECTORIES● TARGET_LINK_LIBRARY
http://www.cmake.org/Wiki/CMake_Useful_Variables
資料
● CMake公式サイト
● CMake-2.8 Documentation● Master Index CMake
Recommended