Cmake и vcpkg - найдите правильное имя библиотеки

У меня проблемы с поиском правильного «целевого имени библиотеки» для использования в файле cmake для пакетов, установленных с помощью vcpkg.

Например, я установил пакет gtest, используя vcpkg install gtest. Мой пример файла cmake выглядит так:

#CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(example)
add_executable(main main.cpp)
find_package(gtest REQUIRED)
target_link_libraries(main gtest) # here, "gtest" is not the right name! 

При запуске cmake создается решение для Visual Studio, но после запуска cmake --build . я получаю сообщение об ошибке:

../use-cmake-vcpkg\main.cpp(1): fatal error C1083: Cannot open include file: 'gtest/gtest.h': No such file or directory ..

Оказывается, строка: target_link_libraries(main gtest) неверна, и мне нужно использовать другое «имя», чтобы включить / связать пакет gtest.

Есть ли способ (с помощью cmake или vcpkg) узнать, какое правильное имя цели следует использовать? (в этом случае для gtest, но и для любого другого пакета?)


person Daniele    schedule 16.03.2019    source источник


Ответы (1)


При использовании find_package(XXX) он может работать в двух режимах: МОДУЛЬ и КОНФИГУРАЦИЯ. Причем приведенные переменные и цели этого вызова зависят от режима.

Если FindXXX.cmake файл существует (и может быть найден), используется режим МОДУЛЬ и данный файл обрабатывается. В противном случае, если пакет поставляется с XXXConfig.cmake файлом, используется режим CONFIG и данный файл обрабатывается. Если ни один из этих файлов не существует, CMake выдает ошибку (если вызывается с ключевым словом REQUIRED) или предупреждение (без ключевого слова REQUIRED).

В случае пакета gtest CMake поставляется со сценарием FindXXX.cmake, поэтому этот сценарий обрабатывается в режиме MODULE. Вы можете найти описание этого скрипта в документации, которая сообщает, что вам нужно использовать GTest::GTest target для ссылки с gtest:

target_link_libraries(main GTest::GTest)
person Tsyvarev    schedule 16.03.2019
comment
или GTest::Main, если вы создаете исполняемый файл - person TooTone; 06.06.2021