Szukaj…


Ogólne podejście do debugowania podczas budowania za pomocą Make

Załóżmy, że make nie powiedzie:

$ make

Uruchom zamiast tego za pomocą make VERBOSE=1 aby zobaczyć wykonane polecenia. Następnie bezpośrednio uruchom polecenie linkera lub kompilatora, które zobaczysz. Postaraj się, aby działało, dodając niezbędne flagi lub biblioteki.

Następnie zastanów się, co zmienić, aby sam CMake mógł przekazać poprawne argumenty do polecenia kompilatora / linkera:

  • co zmienić w systemie (jakie biblioteki zainstalować, jakie wersje, wersje samego CMake)
  • jeśli poprzednie nie powiedzie się, jakie zmienne środowiskowe ustawić lub parametry przekazać do CMake
  • w przeciwnym razie, co zmieni się w CMakeLists.txt projektu lub biblioteki skryptów wykrywających jak FindSomeLib.cmake

Aby pomóc w tym, dodać message(${MY_VARIABLE}) stawia pod CMakeLists.txt lub *.cmake do zmiennych debugowania, które chcesz sprawdzić.

Pozwól CMake tworzyć pełne pliki makefile

Po zainicjowaniu projektu CMake za pomocą project() , szczegółowość wyjściowego skryptu kompilacji można dostosować za pomocą:

CMAKE_VERBOSE_MAKEFILE

Tę zmienną można ustawić za pomocą wiersza polecenia CMake podczas konfigurowania projektu:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

Dla GNU make ta zmienna ma taki sam efekt jak uruchomienie make VERBOSE=1 .

Debuguj błędy find_package ()

Uwaga: wyświetlane komunikaty o błędach CMake zawierają już poprawkę do „niestandardowych” ścieżek instalacji biblioteki / narzędzia. Poniższe przykłady pokazują więcej find_package() wyników CMake find_package() .

CMake wewnętrznie obsługiwany pakiet / moduł

Jeśli poniższy kod (wymienić FindBoost moduł z modułem w pytaniu )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

daje jakiś błąd jak

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.

I zastanawiasz się, gdzie próbował znaleźć bibliotekę, możesz sprawdzić, czy twój pakiet ma opcję _DEBUG , tak jak moduł Boost , aby uzyskać więcej pełnych danych wyjściowych

$ cmake -D Boost_DEBUG=ON .. 

CMake włączony pakiet / biblioteka

Jeśli następujący kod (zamień Xyz odpowiednią bibliotekę )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

daje jakiś błąd jak

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.

Zastanawiasz się, gdzie próbował znaleźć bibliotekę, możesz użyć nieudokumentowanej zmiennej globalnej CMAKE_FIND_DEBUG_MODE aby uzyskać bardziej szczegółowe wyniki

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow