CMake で条件分岐


CMake では条件分岐する場合、大体次の条件を使うみたい。

  • ある変数が定義されているかどうか
  • ある変数の値が真かどうか

変数が定義されているかどうか

DEFINED という命令もあるんだけどなんか思ってたのと違うらしくここで使うものじゃないみたい。
単純に変数名を書けばよいらしい。

if(variable-name)
    # commands
endif()

ある変数が定義されていないことを調べたい場合は NOT を使って反転させる

if(NOT variable-name)
    # commands
endif()

ある変数の値が真かどうか

ある変数の中身を ${} を使って展開して、それを評価する。偽であることを確かめたい場合は NOT を使う。

if (${variable-name})
    # commands
endif()

if (NOT ${variable-name})
    # commands
endif()

変数を評価した際に、真と判定される値は次。
大文字小文字を区別しない。

  • 0 以外の数
  • ON
  • TRUE
  • Y
  • YES

上記以外の値は偽と判定される。

使いどころ

条件分岐を定義しておくとコマンドラインから動作を指定できるようになる。
次のようなスクリプトを組んでおく。

# snip

if(debug)
    message("debug on")
endif()

で、次のように cmake コマンドを打つ際に -D で変数を定義するとフローを変更できる。
この場合 on はいらないんだけど何かしら指定しないとダメなので。別に a でもいい。

cmake -Ddebug=on .