CMakeビルドのデバッグ、またはC++コードのデバッグが必要な場合があります。
CMake デバッグ
最初に、CMakeLists またはその他の CMake ファイルをデバッグする方法について説明します。
変数の印刷
昔からある print 文の方法は、CMake では次のようになります:
message(STATUS "MY_VARIABLE=${MY_VARIABLE}")
ただし、組み込みのモジュールによりこれはさらに簡単になります:
include(CMakePrintHelpers)cmake_print_variables(MY_VARIABLE)
もし、プロパティを印刷したい場合、これはもっとずっと素晴らしいことです!
変数の表示(Printing variables)
CMake では、print 文は、print(Print)ステートメントと同じ方法で表示されます。 各ターゲット (または、SOURCES
、DIRECTORIES
、TESTS
、CACHE_ENTRIES
などのプロパティを持つ他のアイテム – グローバル プロパティは何らかの理由で欠落しているようです) のプロパティを 1 つずつ取得する代わりに、単にそれらをリストして直接印刷させることができます:
cmake_print_properties( TARGETS my_target PROPERTIES POSITION_INDEPENDENT_CODE)
Tracing a run
CMake ファイルで何が、いつ起きるかを正確に観察したいですか? --trace-source="filename"
機能は素晴らしいものです。 ファイル内で実行されるすべての行は、それが実行されたときに画面にエコーされ、何が起こっているかを正確に追うことができます。
cmake -S . -B build --trace-source=CMakeLists.txt
たとえば、--trace-expand
を追加すると、変数はその値に展開されます。
デバッグモードでのビルド
単一構成のジェネレーターでは、-DCMAKE_BUILD_TYPE=Debug
でコードを構築してデバッグフラグを取得できます。 multi-configuration ジェネレーターでは、多くの IDE のように、IDE で設定を選ぶことができます。 このモードには、ジェネレーター式の値 CONFIG:Debug
または CONFIG:Release
と同様に、個別のフラグ (_RELEASE
とは対照的に _DEBUG
で終わる変数) があります。
いったんデバッグビルドを作成すると、gdb や lldb などのデバッガをその上で実行できます。