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
相关产品推荐
相关产品推荐

