Jak debugować pliki CMakeLists.txt?

Odpowiedzi:

62

Nie ma interaktywny debugger dla CMake, jednak istnieją również flagi -Wdev, --debug-outputi --tracektóre mogłyby pomóc. Należy również pamiętać, aby sprawdzić logi CMakeFiles\CMakeOutput.logi CMakeFiles\CMakeError.logtym głównie wyjść zebrać procesów zwanych przez CMake (na przykład podczas sprawdzania obecności typu lub nagłówek).

Od wersji 3.7 CMake oficjalnie obsługuje „tryb serwera”, więc integracja z IDE prawdopodobnie poprawi się w najbliższej przyszłości. Wstępne wsparcie jest dostępne zarówno w Qt Creator, jak i Visual Studio 2017 RC

Joe
źródło
Którego używamy do debugowania ifinstrukcji CmakeList.txt? came --debug ...i cmake --debug-output ...nie drukujesz ich. W Bash odpowiednikiem jest bash -x <cmd>.
jww
@jww Nie jestem w 100% pewien, co próbujesz debugować, ale dane wyjściowe --tracesą zwykle dość obszerne (przekieruj dane wyjściowe do pliku!)
Joe
Próbowałem zdebugować skrypt i zrozumieć, dlaczego niektóre bloki kodu nie zostały wprowadzone. Ale znalazłem problem: string(STRIP ...)był zepsuty. Zobacz także Jak usunąć końcową linię nowej linii w zmiennej Cmake? . Przepraszam, jeśli nie wiesz, co bash -xrobi.
jww
Nie powinieneś tylko wspominać o sprawdzaniu dzienników. Powinieneś wyjaśnić, jak należy sprawdzać dzienniki.
Thomas Jay Rush
@ThomasJayRush Dodałem informacje o lokalizacji i zawartości plików dziennika. Wszystko poza tym zależy od konkretnego problemu.
Joe
7

Możesz spróbować użyć nowego debugera skryptów CMake dostarczonego przez narzędzie VisualGDB . Używa rozwidlenia CMake o otwartym kodzie źródłowym który obsługuje przechodzenie przez pliki CMakeLists.txt, ustawianie punktów przerwania kodu / danych, ocenianie / zmienianie zmiennych itp.

Jest to szczegółowy poradnik na nowym debugera krok po kroku tutaj

Ivan Shcherbakov
źródło
5

Istnieje CMake Daemon Tools Steveire'a . Sam ich nie używałem, ale twierdzą, że oferują możliwości introspekcji, które wydają się być bardzo zbliżone do debuggera.

Edycja : są teraz nazywane CMake-server i są częścią CMake 3.7.

usr1234567
źródło
3

Lubię używać variable_watch do "debugowania" moich plików CMakeLists.txt. Po prostu ustaw na górze mojego skryptu:

variable_watch(SOME_MY_VAR)
leanid.chaika
źródło
2

Przeczytaj również o zmiennej env VERBOSE: https://cmake.org/cmake/help/latest/envvar/VERBOSE.html

Użyłem tego w ten sposób:

export VERBOSE=defined
make

i uzyskałem więcej gadatliwości.

W innych przypadkach edytuj CMakeLists.txtplik, aby zawierał następujący wiersz:

set(CMAKE_VERBOSE_MAKEFILE ON)

(Niektóre posty na ten temat to https://bytefreaks.net/programming-2/make-building-with-cmake-verbose ).

Istnieją również przydatne cmakeopcje kontrolujące wyjście debugowania, zobacz stronę podręcznika: https://cmake.org/cmake/help/latest/manual/cmake.1.html

Eugene Gr. Philippov
źródło