15

生成されたスクリプトで cmake に渡された引数を記録したいと考えています。たとえば、「my-config.in」は cmake によって処理され、次のような定義があります。

config="@CMAKE_ARGS@"

の後cmakeに、my-config次のような行が含まれます。

config="-DLINUX -DUSE_FOO=y -DCMAKE_INSTALL_PREFIX=/usr"

を試しましたがCMAKE_ARGSCMAKE_OPTIONS失敗しました。これについて言及している文書はありません。:-(

4

3 に答える 3

22

この情報を提供する変数は知りませんが、自分で生成することはできます (ただし、いくつかの条件があります)。

-DCMake に渡されるすべての引数CMakeCache.txtは、ビルド ディレクトリのキャッシュ ファイルに追加され、コマンド ラインで再度指定しなくても、その後の呼び出し中に再適用されます。

したがって、あなたの例では、最初にCMakeを次のように実行すると

cmake ../.. -DCMAKE_INSTALL_PREFIX:PATH=/usr

その後、単純に実行されていることがわかります

cmake .

まだにCMAKE_INSTALL_PREFIX設定されています/usr


探しているのCMAKE_ARGSが、CMake のすべての呼び出しからコマンド ラインで定義された変数の完全なリストである場合は、次のようにする必要があります。

get_cmake_property(CACHE_VARS CACHE_VARIABLES)
foreach(CACHE_VAR ${CACHE_VARS})
  get_property(CACHE_VAR_HELPSTRING CACHE ${CACHE_VAR} PROPERTY HELPSTRING)
  if(CACHE_VAR_HELPSTRING STREQUAL "No help, variable specified on the command line.")
    get_property(CACHE_VAR_TYPE CACHE ${CACHE_VAR} PROPERTY TYPE)
    if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
      set(CACHE_VAR_TYPE)
    else()
      set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
    endif()
    set(CMAKE_ARGS "${CMAKE_ARGS} -D${CACHE_VAR}${CACHE_VAR_TYPE}=\"${${CACHE_VAR}}\"")
  endif()
endforeach()
message("CMAKE_ARGS: ${CMAKE_ARGS}")

これは、コマンド ライン経由で設定された各変数に「コマンド ラインで指定された変数にはヘルプがありません」というフレーズがあるという事実に依存するため、少し脆弱です。プロパティとして指定されていHELPSTRINGます。CMake がこの default を変更した場合は、それに応じてステートメントHELPSTRINGを更新する必要があります。if


これが表示したいものではなくCMAKE_ARGS、現在の実行からの引数のみである場合、CMake のソース コードをハッキングする以外にそれを行う方法はないと思います! ただし、以前のコマンドライン引数はすべて効果的に毎回再適用されるため、これはあなたが望むものではないと思います。

于 2012-04-18T21:50:44.350 に答える