2016-04-01 9 views
18

次の2つの点に違いはありますか?CMake変数の "option"と "set CACHE BOOL"の違いは何ですか?

set(FOO true CACHE BOOL "description") 

option(FOO "description" ON) 

ドキュメント:set - option

背景:私はしばらくの間、CMakeのを使用している場合でも、私は今日だけoptionコマンドに気づき、私はので、常にsetを使用している:それならば、私は思っていました最初のものを2番目のものに置き換える価値があります。

答えて

16

あなたの例では、違いはありません。しかし、違いがあります。

  • Optionのデフォルト値はOFFです。
  • あなたはCMakeDependentOption
  • Setと他のオプションに依存オプションがBOOL以外の型、特に;-listsを受け入れることができます。

また、オプションを使用すると、安全に設定できることをユーザーに示しています。外部から内部変数を設定すると、スクリプトが誤って無効な値で破損する可能性があります。

+0

あなたの最後の点については、 'set'を使うときに変数をブール値にすることで、ユーザーが別の種類の値を与えないようにします。コマンドラインで?とにかく、私はあなたの第二のポイントがかなり関連していると感じます。 – Antonio

+0

率直に言って、これまで試みたことはありません。しかし、私はCMake GUIが変数の型に応じて入力メソッドを調整することを覚えていると思います。 – usr1234567

+1

それは私が確認することができます(ブール変数の場合はチェックボックスを与えます) – Antonio

関連する問題