cmake
Test en foutopsporing
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 zoalsFindSomeLib.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 ..