cmake
Testa och felsöka
Sök…
Allmän metod för felsökning när man bygger med Make
Anta att make
misslyckas:
$ make
Starta istället med make VERBOSE=1
att se kommandona som körs. Kör sedan direkt länken eller kompileringskommandot som du ser. Försök att få det att fungera genom att lägga till nödvändiga flaggor eller bibliotek.
Sedan räkna du ut vad du ska ändra, så att CMake själv kan skicka korrekta argument till kommandot kompilator / länk:
- vad man ska ändra i systemet (vilka bibliotek att installera, vilka versioner, versioner av CMake själv)
- om tidigare misslyckas, vilka miljövariabler att ställa in eller parametrar som ska skickas till CMake
- i annat fall vad som ska ändras i
CMakeLists.txt
för projektet eller biblioteksdetekteringsskript somFindSomeLib.cmake
För att hjälpa till, lägg till message(${MY_VARIABLE})
samtal till CMakeLists.txt
eller *.cmake
att felsöka variabler som du vill inspektera.
Låt CMake skapa fullständiga Makefiles
När ett CMake-projekt har initierats via project()
kan utgångsordositeten för det resulterande build-skriptet justeras via:
CMAKE_VERBOSE_MAKEFILE
Denna variabel kan ställas in via CMakes kommandorad när du konfigurerar ett projekt:
cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>
För GNU gör denna variabel samma effekt som att köra make VERBOSE=1
.
Debug find_package () -fel
Obs! De visade CMake-felmeddelandena innehåller redan fix för "icke-standard" bibliotek / verktygsinstallationsvägar. Följande exempel visar bara mer ordförande CMake find_package()
-utgångar.
CMake internt stöds paket / modul
Om följande kod (ersätt FindBoost
modulen med din modul i fråga )
cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)
find_package(Boost REQUIRED)
ger något fel som
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.
Och du undrar var det försökte hitta biblioteket, du kan kontrollera om ditt paket har ett _DEBUG
alternativ som Boost
modulen för att få mer ordbok
$ cmake -D Boost_DEBUG=ON ..
CMake aktiverat paket / bibliotek
Om följande kod (ersätt Xyz
med ditt bibliotek i fråga )
cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)
find_package(Xyz REQUIRED)
ger något fel som
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.
Och du undrar var det försökte hitta biblioteket, du kan använda den odokumenterade CMAKE_FIND_DEBUG_MODE
globala variabeln för att få en mer ordbok
$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..