複数のライブラリを構築する下位レベルのプロジェクトがあります。上位レベルはライブラリを取得し、それらを多くの実行可能ファイルにリンクします。下位レベルには次のオプションがあります。
option(TOOLA_SUPPORT "Ena/Disable toolA support" OFF)
TOOLA_SUPPORT
下位ビルドからフラグを表示するために、上位レベルのビルドを取得したいと思います。現在のように、2 つのTOOLA_SUPPORT
フラグがあります。1 つは下位レベルのビルドで、もう 1 つは上位レベルのビルドです。ビルドを成功させるには両方が同じ状態である必要があるため、これは面倒です。
ある CMakeLists.txt ファイルを別のファイル (キャッシュ) からフラグを継承する方法がわかりません。(下位の CMakeLists.txt/cache 設定全体ではなく、この 1 つのフラグのみが必要です。) どのコマンドが役立つか、または情報を探す場所は?
Edit_1 : (dirLower を含まない) この cmakelists にキャッシュ変数 TOOLA_SUPPORT をdirLower /src/CMakeLists.txt
dirUpper/src/CMakeLists.txt
から「継承」させたい
option(TOOLA_SUPPORT "" OFF)
add_subdirectory(${dirLower}/src ${dirLower}/lib EXCLUDE_FROM_ALL)
if(TOOLA_SUPPORT)
link_directories(blah bla bla)
else()
link_directories(blah bla)
endif()
dirLower/src/CMakeLists.txt
(dirUpper ツリーの一部ではありません) この cmakelists から TOOLA_SUPPORT をdirUpper /src/cmakelists.txt に渡したいと思います
IF(NOT (${COMPILER_FLAGS} MATCHES "-Wall")) #this only applies to dirLower
MESSAGE(FATAL_ERROR "compiler flag not properly set") #will crash the dirUpper 'config'
ENDIF()
OPTION(TOOLA_SUPPORT "" OFF)
IF(TOOLA_SUPPORT)
INCLUDE_DIRECTORIES(some/dir/include)
SET(TOOLA_SUPPORT ON CACHE "" FORCE PARENT_SCOPE)
ELSE()
MESSAGE("TOOLA is not supported")
SET(TOOLA_SUPPORT OFF CACHE "" FORCE PARENT_SCOPE)
ENDIF()
dirLower ファイルを実行すると、親が存在しないという cmake の警告が表示されます。(dirUpper ツリーの一部ではありません)
dirUpper ファイルを実行すると、dirLower ファイルの COMPILER_FLAG テストが原因で致命的なエラーが発生します。この問題を回避すると、TOOLA_SUPPORT 設定が dirLower から継承されていません。