You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake如何将子项目与PostgreSQL外部库正确链接?

解决方案

问题根源

ormpp作为通过FetchContent引入的子项目,未获取到PostgreSQL的头文件路径与库依赖信息,导致编译时找不到libpq-fe.h。

需要修改的CMake配置文件及内容

1. 修改cmake/CMakeLists.txt

在引入ormpp时,先开启其PostgreSQL支持,并确保ormpp目标链接PostgreSQL:

# 开启ormpp的PostgreSQL支持
set(ORMPP_USE_POSTGRESQL ON CACHE BOOL "Enable PostgreSQL support for ormpp" FORCE)

FetchContent_Declare(ormpp
             GIT_REPOSITORY https://github.com/qicosmos/ormpp.git
             GIT_TAG        6f4f9dcb07487a4a7273eb9fa0d7535f6adf6963)

FetchContent_MakeAvailable(ormpp)

# 让ormpp目标继承PostgreSQL的头文件路径与库依赖
target_link_libraries(ormpp PUBLIC PostgreSQL::PostgreSQL)

2. 修改src/server/CMakeLists.txt

可执行文件server依赖ormpp,需添加对ormpp目标的链接:

add_executable(server main.cpp)
# 同时链接PostgreSQL和ormpp依赖
target_link_libraries(server PUBLIC PostgreSQL::PostgreSQL ormpp)

3. 根目录CMakeLists.txt无需修改

当前根目录已正确执行find_package(PostgreSQL REQUIRED),能全局提供PostgreSQL的目标与路径信息。

原理说明

  • 通过set(ORMPP_USE_POSTGRESQL ON FORCE)强制开启ormpp的PostgreSQL编译分支,确保其编译相关代码。
  • 给ormpp目标添加PostgreSQL::PostgreSQL链接依赖,让ormpp编译时自动继承PostgreSQL的头文件路径与库链接信息。
  • 可执行文件server同时链接ormpp和PostgreSQL,保证运行时依赖完整。

内容的提问来源于stack exchange,提问作者healfd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:55:18