【问题标题】:Visual Studio's CMake with vcpkg: Error gdal is not found带有 vcpkg 的 Visual Studio 的 CMake:找不到错误 gdal
【发布时间】:2023-07-19 09:16:02
【问题描述】:

我一直在尝试构建一个 cmake c++ 项目。更具体地说,我正在尝试在这个项目中使用 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

此外,一旦我用vcpkg 正确设置了 gdal 库,visual studio 也应该自动包含它。我已经下载了库的 x64-windows 版本 (vcpkg install gdal:x64-windows) 以便构建正确的架构,并通过 vcpkg integrate install 在用户范围内提供它。

经过反复试验,现在一切正常,相应地包含工具链并自动找到库,从而产生如下配置:

但是,当尝试包含头文件(或其他任何内容;参见代码 sn-p)时,Visual Studio 似乎没有正确链接库,因为它会导致错误消息:cannot open source file "gdal/gdal.h".

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

我应该在哪里进一步调查?

【问题讨论】:

  • 我认为你的问题是你如何使用 CMake 工具链文件。 vcpkg integrate install 对基于 CMake 的项目没有帮助。
  • @drescherjm 我确实这么认为,来自docs.microsoft.com/en-us/cpp/build/vcpkg?view=vs-2019: > 运行 vcpkg 集成安装以配置 Visual Studio 以基于每个用户定位所有 vcpkg 头文件和二进制文件。无需手动编辑 VC++ 目录路径。如果您有多个克隆,则从中运行此命令的克隆将成为新的默认位置。 > 现在,您只需键入文件夹/标题即可#include 标题,并且自动完成功能会为您提供帮助。链接到库或添加项目引用不需要额外的步骤。
  • 我们可以看看你的CMakeLists.txt吗?
  • 我在工作中的几个项目中使用过vcpkg。我根本不使用vcpkg integrate install,因为我的项目基于CMake,并且CMake 处理包含路径。
  • 编辑:图片代替纯文本...imgur.com/a/CZudsGv

标签: c++ visual-studio cmake vcpkg


【解决方案1】:

正如其他人所说,vcpkg integrate installvcpkg.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(例如,缺少包含目录或未链接所有必需的库)。

因此将find_library(GDAL gdal) 替换为find_package(GDAL REQUIRED)target_link_libraries 针对目标GDAL::GDAL (https://cmake.org/cmake/help/v3.17/module/FindGDAL.html)

【讨论】: