Nic*_*las 3 cmake visual-studio vcpkg
当您通过 vcpkg 安装许多软件包(例如vcpkg install cairo)时,在此过程结束时,系统会告诉您要使用哪些命令find_package和target_link_librariesCMake 命令来链接到已安装的软件包。这很好用;您甚至可以重新执行安装命令以再次查看这些 CMake 命令。
但是,通过 vcpkg 安装的某些软件包没有这些。例如,安装 Pango 后,没有实际使用该库的 CMake 命令列表。我在几个 vcpkg 包目录中找到了目标 CMake 文件find_package,但 Pango 目录没有该包的 CMake 文件。
由于某种原因,使用 Pango 的示例代码仍然可以编译(即:它可以找到 Pango 的标头),但由于未链接到正确的库而无法链接。
那么这应该如何运作呢?我是否必须通过 Pango 的各种 CMake 接口列出包含目录、库目录和库文件?或者是否有一些替代的包含机制可以像大多数其他 vcpkg 软件包一样处理细节?
请注意,我正在使用 Visual Studio 2019 的内置 CMake 功能来尝试使用这些功能进行构建。
find_package查找通常随 vcpkg 软件包附带的特定类型的 .cmake 文件。这些 .cmake 文件执行设置要链接的包含目录和库的工作。
因此,如果 vcpkg 软件包不包含此类文件,您将需要基本上完成该文件本应完成的工作。幸运的是,CMake 和 vcpkg 知道各种配置的头文件和库构建文件在哪里。您需要做的是找到这些目录和库,然后将它们添加到您的项目中(以及包所需的任何其他特殊编译器选项,这需要对包有一定的熟悉)。
要查找包含库标头的包含目录,请使用find_path设置一个变量,为其指定要搜索的标头文件的名称。例如:
find_path(PANGO_INCLUDE_DIR pango/pango.h)
Run Code Online (Sandbox Code Playgroud)
然后可以将该头目录设置为包含路径的一部分:
target_include_directories(project_name_here PRIVATE ${PANGO_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)
库有点困难,因为您必须找到实际库的全名(减去扩展名)。如果包涉及多个库,您需要找到所有适用于您的库。
给定一个或多个感兴趣的库的名称,您可以使用 一次找到它们find_library,并将这些库设置为变量:
find_library(PANGO_LIBRARY pango-1.0)
find_library(PANGOCAIRO_LIBRARY pangocairo-1.0)
Run Code Online (Sandbox Code Playgroud)
然后您可以通过以下方式链接这些库target_link_libraries:
target_link_libraries(cairo_vcpkg PRIVATE
...
${PANGO_LIBRARY}
${PANGOCAIRO_LIBRARY}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2657 次 |
| 最近记录: |