Zoeken…


Algemene benadering voor foutopsporing bij het bouwen met Make

Stel dat het make faalt:

$ make

Start het in plaats daarvan met make VERBOSE=1 om de uitgevoerde opdrachten te zien. Voer vervolgens de linker- of compileropdracht uit die u ziet. Probeer het te laten werken door de benodigde vlaggen of bibliotheken toe te voegen.

Zoek vervolgens uit wat te veranderen, zodat CMake zelf de juiste argumenten kan doorgeven aan de compiler / linker-opdracht:

  • wat te veranderen in het systeem (welke bibliotheken te installeren, welke versies, versies van CMake zelf)
  • als vorige mislukt, welke omgevingsvariabelen u moet instellen of parameters die aan CMake moeten worden doorgegeven
  • anders, wat te veranderen in de CMakeLists.txt van het project of de bibliotheek detectiescripts zoals FindSomeLib.cmake

Voeg message(${MY_VARIABLE}) aan in CMakeLists.txt of *.cmake om foutopsporende variabelen te inspecteren.

Laat CMake uitgebreide Makefiles maken

Nadat een CMake-project is geïnitialiseerd via project() , kan de uitvoerverbaalheid van het resulterende build-script worden aangepast via:

CMAKE_VERBOSE_MAKEFILE

Deze variabele kan worden ingesteld via de opdrachtregel van CMake bij het configureren van een project:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

Voor GNU maakt deze variabele hetzelfde effect als het uitvoeren van make VERBOSE=1 .

Debug find_package () fouten

Opmerking: de weergegeven CMake-foutmeldingen bevatten al de correctie voor "niet-standaard" bibliotheek- / tool-installatiepaden. De volgende voorbeelden demonstreren gewoon meer uitvoerige find_package() .

CMake intern ondersteund pakket / module

Als de volgende code (vervang de FindBoost module door uw betreffende module )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

geeft een fout zoals

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.

En je vraagt je af waar het probeerde de bibliotheek te vinden, je kunt controleren of je pakket een _DEBUG optie heeft zoals de Boost module voor meer uitgebreide uitvoer

$ cmake -D Boost_DEBUG=ON .. 

CMake ingeschakeld pakket / bibliotheek

Als de volgende code (vervang de Xyz door uw betreffende bibliotheek )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

geeft de enkele fout zoals

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.

En je vraagt je af waar het probeerde de bibliotheek te vinden, je kunt de ongedocumenteerde CMAKE_FIND_DEBUG_MODE globale variabele gebruiken om een meer uitgebreide output te krijgen

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow