誰にも見えないブログ

雑なメモ。まとまってない文章等

cmake tuorialその4:ファイル生成,インストーラーのビルド等

cmakeを諦めない。

Custom commandを使ったファイル生成

  • Adding a Custom Command and Generated File (Step 6)の内容
    • 標準で用意されているlogやexpを使わない方法を考える
      • 事前計算済みの値( \sqrt{2}=1.41421....)を1~9までテーブルにしたものを利用する
  • cmakeをつかって以下のことをする

    • 平方根Table.hをつくるMakeTable.cxxというプログラムをつくる
    • add_custom_commandMakeTable.cxxを実行しTable.hを作成する
    • Table.hをCMAKE_CURRENT_BINARY_DIRに配置する
    • mysqrt.cxx(sqrt計算ロジックを持つC++ライブラリコード)のinclude対象にTable.hを含め、計算ロジックで平方根表を使うようにする
  • MakeTable.cxxでつくる平方根表(0<=x<=9)

double sqrtTable[] = {
0,
1,
1.41421,
1.73205,
2,
2.23607,
2.44949,
2.64575,
2.82843,
3,
0};
  • 平方根表を使うsqrtのライブラリコード(要Table.hのinclude)
  // use the table to help find an initial value
  double result = x;
  if (x >= 1 && x < 10) {
    std::cout << "Use the table to help find an initial value " << std::endl;
    result = sqrtTable[static_cast<int>(x)];
  }

  // do ten iterations
  for (int i = 0; i < 10; ++i) {
    if (result <= 0) {
      result = 0.1;
    }
    double delta = x - (result * result);
    result = result + 0.5 * delta / result;
    std::cout << "Computing sqrt of " << x << " to be " << result << std::endl;
  }
  • stdの表示が変わり、無事ビルドできたことがわかる
$ ./Tutorial 4
Use the table to help find an initial value 
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
Computing sqrt of 4 to be 2
The square root of 4 is 2
  • 手元の糞デカCMakeLists.txtにgrepして使用状況を調べたところADD_CUSTOM_COMMANDはビルド済みのバイナリファイルのような適当なファイルのコピーなんかに使われてるみたいだ。
  • まとめ&感想

    • CMakeはソースコードの生成も可能
    • ヘッダファイル生成とかはバグの温床になりそうでちょっと怖いな。
  • 参考

パッケージインストーラーのビルド

  • Building an Installer (Step 7)の内容。
  • 流石にユーザーにcmakeを叩いてもらうことは避けたいので配布するものを事前ビルドしてパッケージにする
  • 使い方としてはビルドディレクトリでcpackコマンドを実行するだけ。
mkdir build && cd build
cmake ../src
cpack
  • デフォルトでtar.gzファイルが生成されたがオプションでzipとかに変えれる
  • 回答して確認すると以下のようなファイル内容になっていた
Tutorial-1.0-Linux
├── bin
│   └── Tutorial
├── include
│   ├── MathFunctions.h
│   └── TutorialConfig.h
└── lib
    └── libMathFunctions.a

テスト結果をダッシュボードで表示する

set(CTEST_PROJECT_NAME "CMakeTutorial")
set(CTEST_NIGHTLY_START_TIME "00:00:00 EST")

set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_SITE "my.cdash.org")
set(CTEST_DROP_LOCATION "/submit.php?project=CMakeTutorial")
set(CTEST_DROP_SITE_CDASH TRUE)
  • 実行するとmy.cdash.orgとかいうサイトにテスト結果をアップロードされるので注意

The results of your dashboard will be uploaded to Kitware’s public dashboard here: https://my.cdash.org/index.php?project=CMakeTutorial.

  • ローカルでダッシュボードを確認する方法や

  • 実行コマンドctest [-VV] -D Experimental

  • なんだこの気持ち悪いオプションは[-VV]
  • あんまり重要じゃないのでこのStepはスキップしても良かった気がする。
    • っていうかこのStepいる?