gpt4 book ai didi

c++ - CMake 添加库 libpq (postgreSQL) mac c++ clion

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:33 24 4
gpt4 key购买 nike

我很惊讶 postgres 没有官方的 c++ 库 catch 标准。所以只好用原来的c lipq。但是我如何告诉链接器将它包含在 CMake 中呢?我希望它是 CMake 中的一小段代码。

我只看到 find_package(包是什么?在 JetBrains 的 CMake 快速教程中提到过,但在官方中没有提到)、target_link_libraries、find_library。

我所要求的只是在 Python(跨平台)中 pip install my_library 然后 import my_library

我该怎么做?

最佳答案

在 CMake 中,包是一个外部库(或工具),可以使用脚本(与 CMake 捆绑在一起,或由其他人编写)定位。

find_package 命令运行该脚本。当找到一个包时,脚本会设置一些变量指向包含目录、要链接的库等。

Postgres 的脚本包含在 CMake 中,因此应该可以执行如下操作:

# This command attempts to find the library, REQUIRED argument is optional
find_package(PostgreSQL REQUIRED)

# Add include directories to your target. PRIVATE is useful with multi-target projects - see documentation of target_include_directories for more info
target_include_directories(MyTarget PRIVATE ${PostgreSQL_INCLUDE_DIRS})

# Add libraries to link your target againts. Again, PRIVATE is important for multi-target projects
target_link_libraries(MyTarget PRIVATE ${PostgreSQL_LIBRARIES})

这是一个如何使用 find_package 的简单示例。带有 PostgreSQL_ 前缀的变量由 find_package 命令运行的脚本设置,并在此处描述:FindPostgreSQL documentation

作为旁注,find_library 也可以使用,尽管它是“较低级别”。该命令搜索静态/共享库,用于实现 find_package 使用的脚本。只要您尝试使用的库具有 find_package 脚本,就没有必要使用 find_library

更新(CMake 3.14 及更新版本)

从 CMake 3.14 开始,可以为 Postgres 使用所谓的“导入目标”,这更简单并且符合 modern CMake :

find_package(PostgreSQL REQUIRED)

# This line adds both include paths and libraries for Postgres
target_link_libraries(MyTarget PRIVATE PostgreSQL::PostgreSQL)

PostgreSQL::PostgreSQL 是由Find 模块创建的导入目标。此目标包含设置为其 INTERFACE 属性的目录和库。这意味着在上面的示例中,MyTarget 将“继承”包含来自 PostgreSQL::PostgreSQL 的目录和库,而无需显式设置它们。

关于c++ - CMake 添加库 libpq (postgreSQL) mac c++ clion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com