サーチ…


Makeでビルドするときの一般的なデバッグ方法

makeが失敗したとします。

$ make

コマンドを実行するには、代わりにmake VERBOSE=1を実行してください。次に、表示されるリンカーまたはコンパイラコマンドを直接実行します。必要なフラグやライブラリを追加して動作させてください。

変更するものを見つけてください。そうすれば、CMake自身が正しい引数をcompiler / linkerコマンドに渡すことができます:

  • システムで何を変更するか(インストールするライブラリ、どのバージョン、CMake自体のバージョン)
  • 以前に失敗した場合、設定する環境変数またはCMakeに渡すパラメータ
  • それ以外の場合は、プロジェクトのCMakeLists.txtFindSomeLib.cmakeようなライブラリ検出スクリプトで何を変更するか

そのために、 message(${MY_VARIABLE})CMakeLists.txtまたは*.cmakeに追加して、検査する変数をデバッグします。

CMakeが冗長なMakefileを作成するようにする

project()を介してCMakeプロジェクトを初期化すると、生成されたビルドスクリプトの出力詳細は次のように調整できます。

CMAKE_VERBOSE_MAKEFILE

この変数は、プロジェクトを設定するときにCMakeのコマンドラインから設定できます:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

GNU makeの場合、この変数はmake VERBOSE=1を実行make VERBOSE=1と同じ効果があります。

デバッグfind_package()エラー

注:示されているCMakeのエラーメッセージには、すでに "非標準"ライブラリ/ツールのインストールパスに対する修正が含まれています。次の例は、よりfind_package() CMake find_package()出力を示しています。

CMake内部サポートパッケージ/モジュール

次のコード( 問題のモジュールで FindBoostモジュールを置き換える)

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

のようないくつかのエラーを与える

CMake Error at [...]/Modules/FindBoost.cmake:1753 (message):
  Unable to find the requested Boost libraries.

  Unable to find the Boost header files.  Please set BOOST_ROOT to the root
  directory containing Boost or BOOST_INCLUDEDIR to the directory containing
  Boost's headers.

そして、あなたがライブラリを見つけようとしているのか疑問に思っているならば、 Boostモジュールのようにパッケージに_DEBUGオプションがあるかどうかを調べることができます。

$ cmake -D Boost_DEBUG=ON .. 

CMake対応パッケージ/ライブラリ

次のコード( Xyz問題のライブラリに置き換えてください

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

のようないくつかのエラーを与える

CMake Error at CMakeLists.txt:4 (find_package):
  By not providing "FindXyz.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Xyz", but
  CMake did not find one.

  Could not find a package configuration file provided by "Xyz" with any of
  the following names:

    XyzConfig.cmake
    xyz-config.cmake

  Add the installation prefix of "Xyz" to CMAKE_PREFIX_PATH or set "Xyz_DIR"
  to a directory containing one of the above files.  If "Xyz" provides a
  separate development package or SDK, be sure it has been installed.

そして、あなたはライブラリを見つけようとしているのか疑問に思っています。文書化されていないCMAKE_FIND_DEBUG_MODEグローバル変数を使ってもっと冗長な出力を得ることができます

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow