Поиск правильной конфигурации cmake для библиотеки yaml-cpp

Я пытался использовать yaml-cpp в своем проекте. Мне потребовалось полчаса, чтобы правильно связать библиотеку, поэкспериментировав со следующими именами. После того, как я наконец наткнулся на них в этот файл, я остановился на этом:

find_package(yaml-cpp REQUIRED)
include_directories(${YAML_INCLUDE_DIRS})
target_link_libraries(${YAML_CPP_LIBRARIES})

Это работает, но то, как я их искал, кажется безмозглым.

Как удаленно можно выяснить правильное имя включаемых переменных? Это может быть YAML_LIBS, YAML_LIBRARY, YAML_CPP_LIBRARIES, стандарта нет, верно? Как правильно определить правильную конфигурацию cmake для большинства библиотек С++?

Спасибо.


person Gerry    schedule 26.06.2018    source источник
comment
RTFM ;-): прочитав документацию Findyaml-cpp и, если этого недостаточно, проверив исходный код Findyaml-cpp в CMAKE_MODULE_PATH   -  person André    schedule 26.06.2018
comment
Или просмотрев файл cmake.in: github. com/jbeder/yaml-cpp/blob/master/yaml-cpp-config.cmake.in   -  person Fantastic Mr Fox    schedule 26.06.2018
comment
Так это рецепт? При установке новой библиотеки искать файл .cmake.in?   -  person Gerry    schedule 26.06.2018


Ответы (1)


Большинство FindXXX.cmake скриптов имеют описание использования вверху (поскольку комментарии CMake начинаются #). То же самое относится и к сценариям XXXConfig.cmake (или xxx-config.cmake).

Команда find_package(XXX) использует один из таких скриптов (тот, который реально существует). Итак, прежде чем использовать этот подход для обнаружения пакета, убедитесь, что вы прочитали описание, «встроенное» в такой скрипт.

В вашем случае файл yaml-cpp-config.cmake (созданный в сборке или в каталоге установки) содержит следующее описание:

# - Config file for the yaml-cpp package
# It defines the following variables
#  YAML_CPP_INCLUDE_DIR - include directory
#  YAML_CPP_LIBRARIES    - libraries to link against

поэтому правильное использование результатов find_package(yaml-cpp)

include_directories(${YAML_CPP_INCLUDE_DIRS})
target_link_libraries(<your-target> ${YAML_CPP_LIBRARIES})
person Tsyvarev    schedule 26.06.2018
comment
Все, что мне нужно. Спасибо. - person Gerry; 26.06.2018