cmake
テストとデバッグ
サーチ…
Makeでビルドするときの一般的なデバッグ方法
make
が失敗したとします。
$ make
コマンドを実行するには、代わりにmake VERBOSE=1
を実行してください。次に、表示されるリンカーまたはコンパイラコマンドを直接実行します。必要なフラグやライブラリを追加して動作させてください。
変更するものを見つけてください。そうすれば、CMake自身が正しい引数をcompiler / linkerコマンドに渡すことができます:
- システムで何を変更するか(インストールするライブラリ、どのバージョン、CMake自体のバージョン)
- 以前に失敗した場合、設定する環境変数またはCMakeに渡すパラメータ
- それ以外の場合は、プロジェクトの
CMakeLists.txt
やFindSomeLib.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 ..