CMake Visual Studio с vcpkg: ошибка gdal не найдена

Я пытался создать проект cmake С++. В частности, я пытаюсь использовать библиотеку gdal в этом проекте. В CMakeLists.txt говорится find_library(GDAL gdal) после некоторых исследований, которые я обнаружил, что Visual Studio может открывать файлы cmake по умолчанию, как указано в этой теме: https://docs.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio?view=vs-2019.

Кроме того, Visual Studio также должна автоматически включать библиотеку gdal, как только я правильно настрою ее с помощью vcpkg. Я уже загрузил версию библиотеки для x64-windows (vcpkg install gdal:x64-windows), чтобы построить ее для правильной архитектуры, и сделал ее доступной через vcpkg integrate install для всех пользователей.

После некоторых проб и ошибок теперь все работает нормально, набор инструментов включается соответствующим образом, и библиотека находится автоматически, в результате чего получается такая конфигурация:

mycmakeconfig

Однако при попытке включить заголовочные файлы (или что-либо еще; см. фрагмент кода) Visual Studio, похоже, неправильно связывает библиотеку, поскольку это приводит к сообщению об ошибке: cannot open source file "gdal/gdal.h".

#include <gdal/ogrsf_frmts.h>
#include <gdal/gdal.h>
#include <gdal>

Где я должен исследовать дальше?


person Nestroy    schedule 07.04.2020    source источник
comment
Я думаю, у вас проблема в том, как вы использовали файл цепочки инструментов CMake. vcpkg integrate install не помогает проектам на основе CMake.   -  person drescherjm    schedule 07.04.2020
comment
@drescherjm Думаю, да, из docs.microsoft. com/en-us/cpp/build/vcpkg?view=vs-2019: › Запустите установку vcpkg Integrated, чтобы настроить Visual Studio для поиска всех файлов заголовков и двоичных файлов vcpkg для каждого пользователя. Нет необходимости вручную редактировать пути к каталогам VC++. Если у вас есть несколько клонов, клон, из которого вы запускаете эту команду, становится новым расположением по умолчанию. › Теперь вы можете #include заголовки, просто набрав папку/заголовок, и автозаполнение поможет вам. Никаких дополнительных шагов для связывания с библиотеками или добавления ссылок на проекты не требуется.   -  person Nestroy    schedule 07.04.2020
comment
Можем ли мы увидеть ваш CMakeLists.txt?   -  person drescherjm    schedule 07.04.2020
comment
Я использовал vcpkg для нескольких проектов на работе. Я вообще не использую vcpkg integrate install, потому что мои проекты основаны на CMake, а CMake обрабатывает включаемые пути.   -  person drescherjm    schedule 07.04.2020
comment
Изменить: изображение вместо обычного текста... imgur.com/a/CZudsGv   -  person Nestroy    schedule 07.04.2020


Ответы (1)


Как уже говорили другие, vcpkg integrate install и vcpkg.cmake не работают вместе по следующей причине:

set_target_properties(${name} PROPERTIES VS_USER_PROPS do_not_import_user.props)
set_target_properties(${name} PROPERTIES VS_GLOBAL_VcpkgEnabled false)

это деактивирует интеграцию. Причина деактивации интеграции заключается в том, что вы не пишете неполный CMakeLists.txt (например, отсутствует каталог include или не связаны все необходимые библиотеки).

Таким образом, замените find_library(GDAL gdal) на find_package(GDAL REQUIRED) и target_link_libraries вместо целевого GDAL::GDAL (https://cmake.org/cmake/help/v3.17/module/FindGDAL.html)

person Alexander Neumann    schedule 09.04.2020