3

コマンドライン CMake の失敗をデバッグしようとしています。同じ CMake ファイルが Qt Creator でも機能し、Qt Creator ウィンドウの引数はコマンド ラインで入力したものと一致します。

これは、Qt Creator がいくつかの追加の引数を追加していると思わせます。ジェネレーターのドロップダウンには、アーキテクチャと CMake のバージョンを指定するいくつかのオプションがあるため、これは理にかなっています。

Qt Creator が実行して目的の結果を生成する CMake コマンド、具体的には CMake 実行可能ファイルに渡される引数を取得する方法はありますか?

いくつかのフォレンジックを行うために CMakeCache ファイルを表示することについて話している 1 つの投稿を見つけましたが、これは違いがあることを証明するだけで、どの引数を変更する必要があるかをすぐには示しません。

4

1 に答える 1

4

次のブロックを CMakeLists.txt の最後に追加し、Qt Creator から CMake を再度実行してみてください。-DCMake の出力には、コマンド ライン引数を介して渡されたすべての変数が一覧表示されます。

get_cmake_property(CacheVars CACHE_VARIABLES)
foreach(CacheVar ${CacheVars})
  get_property(CacheVarHelpString CACHE ${CacheVar} PROPERTY HELPSTRING)
  if(CacheVarHelpString STREQUAL "No help, variable specified on the command line.")
    get_property(CacheVarType CACHE ${CacheVar} PROPERTY TYPE)
    if(CacheVarType STREQUAL "UNINITIALIZED")
      set(CacheVarType)
    else()
      set(CacheVarType :${CacheVarType})
    endif()
    set(CMakeArgs "${CMakeArgs} -D${CacheVar}${CacheVarType}=\"${${CacheVar}}\"")
  endif()
endforeach()
message("CMakeArgs: ${CMakeArgs}")

詳細については、この回答を参照してください。

-Gこれは、引数を介して選択されたジェネレーター (存在する場合) を表示しません。それを見つけるにCMAKE_GENERATOR:INTERNAL=...は、CMakeCache.txt で探す必要があります

これが全体的な問題の特定に役立たない場合は、おそらく @arrowdodger のアドバイスに耳を傾け、発生しているエラーと 2 つのビルド環境に関する詳細を投稿する必要があります。たとえば、ソース ツリーのサブディレクトリから CMake を実行するだけで、エラーが発生する可能性があります。

于 2012-10-25T22:52:20.350 に答える