CMake add library libpq (postgreSQL) mac c++ clion

CMake add library libpq (postgreSQL) mac c++ clion

本文关键字:mac c++ clion postgreSQL add library libpq CMake      更新时间:2023-10-16

我很惊讶没有官方的 c++ 库可以让 postgres 赶上标准。所以我必须使用原来的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命令运行该脚本。找到包时,脚本会设置许多指向包含目录、要链接的库等的变量。

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

# 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 文档

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

更新(CMake 3.14 及更高版本)

从CMake 3.14开始,可以使用所谓的"导入目标"来表示Postgres,这更简单一些,并且符合现代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"继承"包含目录和库,而不必显式设置它们。