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

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

我很惊讶 postgres 没有赶上标准的官方 c++ 库。所以只好用原来的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 命令 运行 那个脚本。当找到一个包时,脚本会设置一些变量指向包含目录,库指向link,等等

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 documentation

附带说明一下,find_library 也可以使用,尽管它是 "lower level"。该命令搜索 static/shared 库,用于实现 find_package 使用的脚本。只要您尝试使用的库具有 find_package 脚本,就没有必要使用 find_library.

更新(CMake 3.14 及更新版本)

从 CMake 3.14 开始,可以对 Postgres 使用所谓的 "imported target",这更简单一些并且符合 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 将 "inherit" 包括来自 PostgreSQL::PostgreSQL 的目录和库,而无需显式设置它们。