如何更新CMake的FindMysqlConnectorCpp模块适配mysql-connector-c++8.1.0的JDBC?
修复FindMysqlConnectorCpp.cmake适配8.1.0版本的方案
核心问题原因
mysql-connector-c++ 8.1.0版本将遗留JDBC代码的头文件迁移到了jdbc子目录下,旧版Find模块仍在原路径查找头文件,导致找不到MYSQLCONNECTORCPP_INCLUDE_DIR。
具体修改步骤
替换旧版FindMysqlConnectorCpp.cmake为以下内容,适配RHEL8 RPM包的路径结构:
# - Try to find MysqlConnectorCpp (JDBC module) # Once done this will define # MYSQLCONNECTORCPP_FOUND - System has MysqlConnectorCpp # MYSQLCONNECTORCPP_INCLUDE_DIR - The MysqlConnectorCpp include directories # MYSQLCONNECTORCPP_LIBRARY - The libraries needed to use MysqlConnectorCpp find_path(MYSQLCONNECTORCPP_INCLUDE_DIR NAMES jdbc/mysql_connection.h PATHS /usr/include/mysql-cppconn DOC "The MysqlConnectorCpp (JDBC) include directory") find_library(MYSQLCONNECTORCPP_LIBRARY NAMES mysqlcppconn PATHS /usr/lib64 DOC "The MysqlConnectorCpp (JDBC) library") include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MysqlConnectorCpp DEFAULT_MSG MYSQLCONNECTORCPP_INCLUDE_DIR MYSQLCONNECTORCPP_LIBRARY) if(MYSQLCONNECTORCPP_FOUND) if(NOT TARGET MysqlConnectorCpp::JDBC) add_library(MysqlConnectorCpp::JDBC SHARED IMPORTED) set_target_properties(MysqlConnectorCpp::JDBC PROPERTIES IMPORTED_LOCATION "${MYSQLCONNECTORCPP_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${MYSQLCONNECTORCPP_INCLUDE_DIR}") endif() endif() mark_as_advanced(MYSQLCONNECTORCPP_INCLUDE_DIR MYSQLCONNECTORCPP_LIBRARY)
项目CMakeLists.txt中的使用方式
确保你的项目中正确链接目标:
find_package(MysqlConnectorCpp REQUIRED) # 替换your_target为你的实际目标名称 target_link_libraries(your_target PRIVATE MysqlConnectorCpp::JDBC)
代码中头文件引用注意
由于头文件在jdbc子目录下,代码中需要调整引用路径:
#include <jdbc/mysql_connection.h> #include <jdbc/mysql_driver.h> // 其他JDBC相关头文件同理
验证路径(可选)
可以通过以下命令确认RHEL8上RPM包的文件结构:
# 查看头文件路径 rpm -ql mysql-connector-c++-devel-8.1.0-1.el8.x86_64 | grep include # 查看库文件路径 rpm -ql mysql-connector-c++-devel-8.1.0-1.el8.x86_64 | grep lib
内容的提问来源于stack exchange,提问作者cinargursoy
相关产品推荐
相关产品推荐

