0

次のコマンドを使用して、コマンドラインを使用して DCMTK を構築しています。

cmake -DBUILD_APPS=BOOL:OFF ../latest_dcmtk

BUILD_APPS 設定をコマンド ラインから最上位の CMakeLists.txt 構成ファイルに移動したいと考えています。最上位の構成ファイルで BUILD_APPS オプションをどのように設定しようとしても、コマンド ラインから BUILD_APPS オプションを明示的に設定しない限り、正しい動作が得られません。

トップレベルの CMakeLists.txt ファイルからコマンド ライン オプションを明示的に設定する方法はありますか?

これを DCMTK ソースから借りてきましたが、動作しません:

SET (BUILD_APPS OFF CACHE BOOL "" FORCE)                                                             
MESSAGE ("-- BUILD_APPS is set to " ${BUILD_APPS})

上記の SET コマンドで生成された CMakeCache.txt ファイルを見ると、オプションが正しく設定されていることがわかります。

./CMakeCache.txt:BUILD_APPS:BOOL=OFF

残念ながら、このオプションは機能しません。

4

1 に答える 1

0

一般的に言えば、CMake を使用する際に留意しなければならないことが 2 つあります。

  1. CMake はスクリプト言語なので、すべてのコードは順次処理されます
  2. CMake の変数キャッシュは、2 つの実行間で値を保持するためにあります

したがって、@ Tsyvarev と @ usr1234567 に同意しますが、これは順序の問題である可能性が最も高いです。

  • set(BUILD_APPS OFF CACHE BOOL "" FORCE)あなた/コードがチェックする前に、あなたはしなければなりませんif (BUILD_APPS)
  • その後、キャッシュされた変数を隠しているset(BUILD_APPS ...)メインに通常の変数がないことを確認する必要がありますCMakeLists.txt
  • ファイルにあるCMakeCache.txtものはすべて、コードのすべての処理が終了した後の変数の状態のみです ( main の最後CMakeLists.txt) 。

もう一度試してみました-Dが、キャッシュ エントリが強制されます。したがって、-Dコマンド ライン オプションの使用とset(... CACHE ... FORCE). それらを組み合わせて使用​​することはできません(後者は、指定されたオプションのコマンドラインを常に上書きします)。

variable_watch(BUILD_APPS)メインの先頭に追加してCMakeLists.txt、変数を非表示/上書きしているコード部分を見つけてください。

参考文献

于 2015-10-30T08:23:39.513 に答える