Cross Platform Make

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

Cross PlatformMake ありがとうございました。

http://www.cmake.org/

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