如何将C ++ MySQL连接器库链接到Cmake?

时间:2018-01-09 10:02:57

标签: c++ mysql boost cmake

我正在使用CLion制作一个使用MySQL数据库来处理数据的C ++程序。我已经下载了MySQL Connector和Boost并将其链接到我的cmake文件。但是,当我尝试构建我的项目时,出现了一个错误"未定义对`_imp__get_driver_instance'"的引用。有人告诉我链接MySQL连接器库,但由于我对C ++很新,并且使用这个连接器,我不知道如何做到这一点。

目前,这是我的Cmake文件:

cmake_minimum_required(VERSION 3.8)
project(Learn_Cpp)


set(CMAKE_CXX_STANDARD 17)

include_directories("C:/mysql-connector-c++-noinstall-1.1.9-win32/include" "C:/mysql-connector-c++-noinstall-1.1.9-win32/include/cppconn" "C:/boost_1_66_0")

set(SOURCE_FILES "C++ Tutorials/ClassFile.cpp" "C++ Tutorials/ClassFile.h" "C++ Tutorials/Learn.cpp")
add_executable(Learn_Cpp ${SOURCE_FILES})

有谁知道如何解决此问题?

1 个答案:

答案 0 :(得分:0)

MySql文档对Visual StudioNetbeans进行了广泛的描述。你需要为CMake做相应的事情。

快速而肮脏的方法是在CMakeLists.txt中硬编码库的路径:

target_link_libraries(Learn_Cpp c:/path/to/mysql/lib/mysqlcppconn.lib)

请注意,这将链接到连接器的dll版本,因此如果要在构建后运行程序,则需要将dll放在exe可以找到它的目录中。除此之外,这应该可行,但实际上只适用于您的机器上的特定构建配置。为了使其可移植且更健壮,您可以使用find_library为磁盘上的配置找到正确的库文件。同样,您可以使用find_path找到包含目录,而不是对其进行硬编码,并使用find_packagelocate Boost

在现代CMake中,将find_pathfind_library MySql调用的结果包装在imported target中也是一种很好的风格,类似于FindBoost的方式它为Boost。