Поиск…


Общий подход к отладке при создании с помощью Make

Предположим, что make терпит неудачу:

$ make

Запустите его вместо make VERBOSE=1 чтобы увидеть выполненные команды. Затем сразу запустите команду компоновщика или компилятора, которую вы увидите. Попробуйте сделать это, добавив необходимые флаги или библиотеки.

Затем выясните, что нужно изменить, поэтому сам CMake может передать правильные аргументы команде компилятора / компоновщика:

  • что менять в системе (какие библиотеки устанавливать, какие версии, версии самого CMake)
  • если предыдущий сбой, какие переменные среды для установки или параметры передаются в CMake
  • в противном случае, что нужно изменить в CMakeLists.txt проекта или скриптах обнаружения библиотеки, таких как FindSomeLib.cmake

Чтобы помочь в этом, добавьте message(${MY_VARIABLE}) в CMakeLists.txt или *.cmake для отладки переменных, которые вы хотите проверить.

Пусть CMake создает подробные Makefiles

Когда проект CMake инициализируется через project() , выходная многословность результирующего скрипта сборки может быть скорректирована с помощью:

CMAKE_VERBOSE_MAKEFILE

Эта переменная может быть задана с помощью командной строки CMake при настройке проекта:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

Для GNU эта переменная имеет тот же эффект, что и работа make VERBOSE=1 .

Ошибки отладки find_package ()

Примечание. Представленные сообщения об ошибках CMake уже включают исправление для «нестандартных» путей установки библиотеки / инструмента. Следующие примеры просто демонстрируют более подробные результаты CMake find_package() .

CMake внутренне поддерживаемый пакет / модуль

Если следующий код (замените модуль FindBoost на ваш модуль )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

дает некоторую ошибку, например

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.

И вам интересно, где он пытался найти библиотеку, вы можете проверить, есть ли в вашем пакете опция _DEBUG например, модуль Boost для получения более подробного вывода

$ cmake -D Boost_DEBUG=ON .. 

CMake enabled Package / Library

Если следующий код (замените Xyz на соответствующую библиотеку )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

дает некоторую ошибку, например

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.

И вам интересно, где он пытался найти библиотеку, вы можете использовать недокументированную глобальную переменную CMAKE_FIND_DEBUG_MODE для получения более подробного вывода

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow