Cmake и vcpkg - найти правильное имя библиотеки - PullRequest
0 голосов
/ 16 марта 2019

У меня проблемы с поиском правильного "имени цели библиотеки", которое будет использоваться в файле 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 в этом случае, но также и для любого другого pacakage?)

1 Ответ

1 голос
/ 16 марта 2019

При использовании find_package(XXX) он может работать в двух режимах: MODULE и CONFIG .И полученные переменные и цели этого вызова зависят от режима .

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

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

target_link_libraries(main GTest::GTest)
...