【发布时间】:2021-07-01 12:47:24
【问题描述】:
当您通过 vcpkg 安装许多软件包时(例如 vcpkg install cairo),在此过程结束时,您会被告知使用哪些 find_package 和 target_link_libraries CMake 命令来链接到已安装的软件包.这很好用;您甚至可以重新执行 install 命令再次查看这些 CMake 命令。
但是,通过 vcpkg 安装的某些软件包没有这些。例如,在安装 Pango 之后,没有实际使用该库的 CMake 命令列表。我在几个 vcpkg 包目录中找到了find_package 的目标 CMake 文件,但 Pango 目录没有该包的 CMake 文件。
由于某种原因,使用 Pango 的示例代码仍然可以编译(即:它可以找到 Pango 的头文件),但由于未链接到正确的库而无法链接。
那么这应该如何工作?我是否必须通过 Pango 的各种 CMake 接口列出包含目录、库目录和库文件?或者是否有一些替代的包含机制可以像大多数其他 vcpkg 包一样处理细节?
请注意,我正在使用 Visual Studio 2019 的内置 CMake 功能来尝试使用这些功能进行构建。
【问题讨论】:
-
看起来他们准备 CMakeLists.txt 作为 vcpkg Pango 端口的一部分。由于此
CMakeLists.txt不导出目标,因此您不能直接将此包包含在find_package中。不确定他们对在 CMake 代码中使用这个包的期望。可能,他们希望您(从某处)下载脚本FindPango.cmake,因此您可以使用find_package(Pango)。 -
@Tsyvarev,这不是解决方案,您只需要手动链接
-
@RashidLadjouzi:为什么使用脚本
FindXXX.cmake不是解决方案?此类脚本通常执行find_path和find_library- 您在答案代码中使用的相同命令。 “查找”脚本的一个优点是它知道所有可能的库名称、库和标题的所有(相对)位置。一些这样的脚本也知道依赖库。一些这样的脚本能够提取包的版本。为什么更喜欢手动编写脚本而不是使用现有的脚本?
标签: visual-studio cmake vcpkg