CMakeLists.txtの編集後にcmakeを使用しているので、いくつかの変数はロードされません。私がCACHE STRINGで定義したものを持っていれば、それを強制的に変更したり、キャッシュを削除したりせずに変更することはできません。CMakeCache.txtとはなぜ私の変数を上書きするのですか
なぜこのCMakeCache.txtファイルがあるのですか?それは必要なのでしょうか?
CMakeLists.txtの編集後にcmakeを使用しているので、いくつかの変数はロードされません。私がCACHE STRINGで定義したものを持っていれば、それを強制的に変更したり、キャッシュを削除したりせずに変更することはできません。CMakeCache.txtとはなぜ私の変数を上書きするのですか
なぜこのCMakeCache.txtファイルがあるのですか?それは必要なのでしょうか?
はい、確かに必要です。 CMakeは、CMakeListファイルが変更されたか、またはmake rebuild_cache
のときに、ビルド中にキャッシュが再実行されているときにキャッシュを使用します。また、通常の構成実行の開始時にキャッシュをロードします。
次のようにCMakeのある使用のために標準worflow:
ccmake
または類似の初期バージョンを生成するためには、検査最初の実行によって設定されたキャッシュ変数を表示し、適切に修正します。を生成します。
上記を有効にするには、キャッシュ内のユーザー変更を、CMakeLists.txtで指定された既定のキャッシュ値よりも優先させる必要があります。それ以外の場合、ポイント2からのユーザー変更は、次回の構成時に失われ、プロジェクト指定のデフォルトによって再び上書きされます。
そのため、CMakeコマンドset(var ... CACHE)
は、キャッシュ変数var
が既に存在する場合は変更しません。通常、あなたのプロジェクトでは、キャッシュをユーザーが調整可能なデフォルト値を提供するものとして設定する必要があります。
あなたは本当にあなたができる、プロジェクト内のユーザーの選択肢をオーバーライドする必要がある場合:
CACHE
なしset
を使うset
コマンドにFORCE
を追加したり、最後に、[load_cache](https://cmake.org/cmp/help/v3.4/command/load_cache.html?highlight=load_cache)コマンドは、別のプロジェクトのCMakeキャッシュから値をロードします。 –
やる気例
これは言及が、より明示的な例を理解しやすくするためにhttps://stackoverflow.com/a/42160304/895245何基本的にあります。
git clone project
cd project
# Options dfined with "option(" in CMakeLists.txt.
cmake -DOPT1=ON -DOPT2=OFF -DOPT3=ON .
make
# Create bugs (edit code).
make
その後、数日後に、新しいディレクトリがプロジェクトに追加されます。
は、このユースケースを考えてみましょう。つまり、CMakeLists.txt
が新しいadd_subdirectory
に変更されたため、cmake
を再度実行してメイクファイルを更新する必要があります。
git pull
cmake -DOPT1=ON -DOPT2=OFF -DOPT3=ON .
make
をしかし、キャッシュのために、私たちは行うことができます:
cmake .
make
の詳細については、我々は
CMakeCache.txt
を持っていなかった場合は、私たちは覚えていると、再びすべてのオプションを入力する必要があります[変数を設定および使用するためのCMakeの構文は何ですか](https://stackoverflow.com/questions/31037882/whats-the-cmake-syntax-to-set-and-use-variables)を参照してください。 – Florian