Mac环境下使用CMake配置libpqxx遇到问题求助
解决libpqxx在macOS上的CMake配置问题
问题根源
你从GitHub获取的CMake配置文件和Homebrew安装的libpqxx路径不匹配,且缺少自动生成的libpqxx-targets.cmake文件,导致find_package失效,后续头文件引用和库链接也出现问题。下面给出适配Homebrew环境的手动编写方案。
1. 替换libpqxx-config.cmake内容
直接覆盖/usr/local/Cellar/libpqxx/7.7.5/lib/cmake/libpqxx-config.cmake为以下内容:
# libpqxx-config.cmake - 适配Homebrew安装版本 set(libpqxx_VERSION 7.7.5) # 自动查找依赖的PostgreSQL(libpq) find_package(PostgreSQL REQUIRED) # 配置libpqxx的头文件路径 set(libpqxx_INCLUDE_DIRS "/usr/local/Cellar/libpqxx/7.7.5/include") # 配置libpqxx的库文件路径 set(libpqxx_LIBRARY_DIRS "/usr/local/Cellar/libpqxx/7.7.5/lib") # 指定链接库 set(libpqxx_LIBRARIES pqxx) # 创建导入目标,提供给CMake链接使用 add_library(pqxx SHARED IMPORTED) set_target_properties(pqxx PROPERTIES IMPORTED_LOCATION "/usr/local/Cellar/libpqxx/7.7.5/lib/libpqxx.dylib" INTERFACE_INCLUDE_DIRECTORIES "${libpqxx_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${PostgreSQL_LIBRARIES}" ) # 生成targets文件,解决原错误中的缺失问题 export(TARGETS pqxx FILE "${CMAKE_CURRENT_LIST_DIR}/libpqxx-targets.cmake")
2. 修正你的CMakeLists.txt
原文件中手动设置的PostgreSQL_INCLUDE_DIR路径错误,改为让CMake自动查找依赖,修正后内容:
cmake_minimum_required(VERSION 3.25.0) project(Main VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定libpqxx的CMake配置目录 set(libpqxx_DIR "/usr/local/Cellar/libpqxx/7.7.5/lib/cmake") find_package(libpqxx REQUIRED) set(PROJECT_SOURCES src/main.cpp) add_executable(Main ${PROJECT_SOURCES}) # 链接libpqxx及其依赖的PostgreSQL库 target_link_libraries(Main PRIVATE pqxx)
3. 验证操作
- 保存上述两个文件的修改
- 清空原build目录,重新运行
cmake ..和make - 执行编译后的程序,应该能正常找到头文件并连接PostgreSQL
内容的提问来源于stack exchange,提问作者Mehrshad Khansarian
相关产品推荐
相关产品推荐

