cmake
Testuj i debuguj
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 jakFindSomeLib.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 ..