cmakeの使い方

cmakeはクロスプラットフォームなconfigureだ.簡単な日本語の解説は http://fseek.exblog.jp/5637217 にもある.使い方は

  1. CMakeList.txtというファイルにコンパイル(make)したいプログラムの情報を書く
  2. cmake . (最後の"."を忘れないこと)
  3. make

で目的のプログラムのコンパイルを行うことができる.windowsでは最後のmakeコマンドの変わりにcmakeの生成したhoge.slnをVisualStudioでコンパイルする.より詳しい使い方とCMakeList.txtの記述方法を以下の例で説明する.

hello.c

以下のhello.cをコンパイルしたい場合は

/* hello.c */
#include <stdio.h>
int main(void)
{
  printf("Hello, World.\n");
  return(0);
}

CMakeList.txtは以下の1行だけでいい

ADD_EXECUTABLE(hello hello.c)

CMakeList.txtをhello.cと同じディレクトリに置いて,そのディレクトリで
cmake .
とコマンドを実行すると以下のようになる.

  • unixの場合はMakefileが生成されるのでmakeコマンドでhelloという実行ファイルができる.
  • windowsの場合はhello.slnというファイルが生成されるので,これをVisualStudioからコンパイルすれば実行ファイルhello.exeができる

共有ライブラリ (shared library)

共有ライブラリ (shared library)を作りたい場合は以下のようにする.
以下のlibhellolib.c を例にする.

  /* libhellolib.c -  */
  #include <stdio.h>
  void hello(void) {
      printf("Hello, library world.\n");
  }

CMakeList.txtは以下の1行だけでいい

ADD_LIBRARY(hellolib  SHARED libhellolib.c )

libhellolib.soがmakeするとできる."lib"がファイル名の先頭に自動的につく点に注意しよう.
(http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/more-examples.html#AEN343を参考にした)

共有ライブラリ (shared library)のリンク

libhellolib.soを別プログラムから呼んでみよう.以下のようにする.

/* libhellolib.h  */
  void hello(void);
 /* demo_use.c -- "hello" ルーチンを直接使用する方法を示します */
  #include "libhellolib.h"
  int main(void) {
      hello();
      return 0;
  }

これをlibhellolib.soとリンクしてコンパイルするためのCMakeList.txtは以下のようになる

ADD_EXECUTABLE(demo_use demo_use.c )
TARGET_LINK_LIBRARIES(demo_use hellolib)

projct名を記述することもできる

PROJECT(HelloWorld)
ADD_EXECUTABLE(demo_use demo_use.c )
TARGET_LINK_LIBRARIES(demo_use hellolib)


さらに細かいオプション等の説明が以下にある
http://yosilove.blog.shinobi.jp/Entry/865/

cmakeその他