1. ホーム
  2. c++

CMake のデフォルトの option(...) 値を親の CMakeLists.txt からオーバーライドする。

2023-11-10 04:57:48

質問

私は、アップグレードを容易にするために、彼らのビルド システムへの最小限の変更で、私のソース ツリーにいくつかのサード パーティ ライブラリを含めようとしています。彼らはすべて私と同じように CMake を使用しているので、私自身の CMakeLists.txt に add_subdirectory(extern/foo) を libfoo に使用することができます。

しかし、foo の CMakeLists.txt はテストハーネスをコンパイルし、ドキュメントをビルドし、私には必要のない共有ライブラリをビルドしています。libfoo の作者には、これらをオプションで制御する先見の明がありました。 option(FOO_BUILD_SHARED "Build libfoo shared library" ON) つまり、CMake のコマンドラインから設定することができるのです。しかし、私はそれをデフォルトでオフにし、コマンドラインからオーバーライドできるようにしたいと思います。

私は set(FOO_BUILD_SHARED OFF) の前に add_subdirectory(extern/foo) . これは、2回目以降のビルド試行時に共有ライブラリのビルドを試行しない効果がありますが、私が本当にスピードアップする必要がある最初のビルドの時にはありません。

これは可能ですか、または、これらのプロジェクトのためにフォークされた CMakeLists.txt を維持する必要がありますか?

どのように解決するのですか?

CACHEに変数を設定してみてください。

SET(FOO_BUILD_SHARED OFF CACHE BOOL "Build libfoo shared library")

注:CMakeがこのエントリーをGUIで表示する方法を知るために、変数の種類と説明を指定する必要があります。