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
的目录和库,而无需显式设置它们。
我很惊讶 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
的目录和库,而无需显式设置它们。