【问题标题】:CMake add library libpq (postgreSQL) mac c++ clionCMake 添加库 libpq (postgreSQL) mac c++ clion
【发布时间】:2018-01-28 22:27:19
【问题描述】:

我很惊讶没有官方的 c++ 库让 postgres 赶上标准。所以我必须使用原始的c lipq。但是我如何告诉链接器将它包含在 CMake 中?我希望它是 CMake 中的一条短线。

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

我所要求的只是在 Python(跨平台)pip install my_libraryimport my_library 中。

我该怎么做?

【问题讨论】:

    标签: c++ postgresql cmake clion


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2020-09-21
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多