我似乎找不到解决我的 CMake 问题的方法。
我想使用 mysql-connector-c++ 和 CURL,在我的
/Desktop/example
目录中我制作了以下 CMakeLists.txt:
cmake_minimum_required (VERSION 3.1.0)
PROJECT (main)
ADD_EXECUTABLE (main main.cpp)
target_link_libraries(main curl mysql-connector-c++)
target_compile_features(main PRIVATE cxx_range_for)
我在 main.cpp 中包含了以下标头:
#include <curl/curl.h>
#include <mysql_connection.h>
#include <driver.h>
#include <exception.h>
#include <resultset.h>
#include <statement.h>
我已经下载了 mysql-connector-c++ 的 zip 文件,解压缩并将其放在我当前的目录中。
然后我运行
cmake .
和 make
并生成以下错误:
fatal error:
'mysql_connection.h' file not found
这很奇怪,因为当我删除 mysql-connector 标头时,CURL 工作正常。
有什么想法可以解释为什么这不起作用吗?
注意 以下命令运行并显示指定结果:
g++ -std=c++14 -lcurl main.cpp //Success
g++ -std=c++14 -lcurl -lmysqlcppconn main.cpp //Fatal eror: 'mysql_connection.h' file not found
我相信 CMake 不知道包含标头和库作为“包含”或“库”目录的目录。您可以尝试的一种解决方案是在调用之前指定包含和链接目录
ADD_EXECUTABLE (main main.cpp)
所以你的 CMakeLists.txt 应该如下所示:
cmake_minimum_required (VERSION 3.1.0)
project(main)
set(FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR your_path_to_mysql_connectorcpp)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/cppconn)
link_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/lib)
add_executable(main main.cpp)
target_link_libraries(main curl mysqlcppconn)
target_compile_features(main PRIVATE cxx_range_for)
一些注意事项:
1) 如果您想在源代码中调用
driver.h
,那么您应该使用 CMakeLists.txt above;
2)如果您想在源代码中调用
cppconn/driver.h
,那么您应该使用CMakeLists.txtbelow:
cmake_minimum_required (VERSION 3.1.0)
project(main)
set(FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR your_path_to_mysql_connectorcpp)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include)
link_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/lib)
add_executable(main main.cpp)
target_link_libraries(main curl mysqlcppconn)
target_compile_features(main PRIVATE cxx_range_for)
随着您的 CMake 变得更加复杂,您还可以在每个目标的基础上定义包含目录和库,但对于您现在拥有的东西来说,上面的内容应该没问题。
首先在你的Mac上安装mysql库
brew install mysql-connector-c++
然后使用上面的cmake文本
cmake_minimum_required(VERSION 3.17)
project(connectToMysql)
set(CMAKE_CXX_STANDARD 14)
add_executable(connectToMysql main.cpp)
include_directories(/usr/local/Cellar/mysql-connector-c++/8.0.25/include)
target_link_libraries(connectToMysql -L/usr/local/Cellar/mysql-connector-c++/8.0.25/lib/)
target_link_libraries(connectToMysql libmysqlcppconn8.2.8.0.25.dylib)
请记住,如果您想将库链接到 cmake 您必须指定该 .dylib 文件的名称
祝你好运
您最终弄清楚如何做到这一点了吗?现在遇到同样的问题 - 使用 cmake 构建 mysql c++ 连接器程序。