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 som FindSomeLib.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 ..


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow