2017-01-11 1 views
0

Je n'arrive pas à trouver une solution à mon problème CMake.Exécution de mysql-connector avec CMake et C++?

Je veux utiliser mysql-connector-C++ et CURL, dans mon répertoire /Desktop/example je l'ai fait CMakeLists.txt suivante:

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) 

J'ai inclus les en-têtes suivants dans mon main.cpp:

#include <curl/curl.h> 

#include <mysql_connection.h> 
#include <driver.h> 
#include <exception.h> 
#include <resultset.h> 
#include <statement.h> 

J'ai téléchargé le zip file pour mysql-connector-C++, décompressé et placé dans mon répertoire courant.

J'ai couru alors cmake . et make et l'erreur suivante est générée:

fatal error: 
    'mysql_connection.h' file not found 

C'est bizarre que lorsque je retire les en-têtes connecteur mysql, CURL fonctionne très bien.

Une idée de pourquoi cela ne fonctionne pas?

N.B. Les commandes suivantes fonctionnent avec le résultat déclaré:

g++ -std=c++14 -lcurl main.cpp //Success 
g++ -std=c++14 -lcurl -lmysqlcppconn main.cpp //Fatal eror: 'mysql_connection.h' file not found 
+0

Avez-vous placé l'archive décompressée dans 'Desktop/example'? – fedepad

+0

@fedepad devrait-il être à la place du 'mysql-connector-C++' décompressé? –

+0

pas besoin, j'écris une réponse que vous pouvez essayer ... – fedepad

Répondre

1

Je crois que CMake ne connaît pas ce répertoire qui contient en-tête et bibliothèque comme un « include » ou répertoire « bibliothèque ». Une solution que vous pouvez essayer est de spécifier les include et lien avant l'appel

ADD_EXECUTABLE (main main.cpp) 

afin que votre CMakeLists.txt devrait ressembler à:

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) 

Quelques notes:

1) Si vous voulez appeler driver.h dans vos sources puis vous devez utiliser le CMakeLists.txt ci-dessus;

2) Si vous voulez appeler cppconn/driver.h dans vos sources, vous devez utiliser le CMakeLists.txt ci-dessous:

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) 

Comme votre CMake obtenir plus complexe, vous pourriez aussi Define inclure les répertoires et les bibliothèques sur une base par cible, mais ce qui précède devrait être bon pour les choses que vous avez maintenant.

+0

Il indique maintenant 'ld: bibliothèque introuvable pour -lmysql-connector-C++' –

+1

Êtes-vous sûr que le nom de la bibliothèque est correct? Comme je l'ai téléchargé et que le nom semble être 'libmysqlcppconn.dylib', placez mysqlcppconn' dans' target_link_libraries() '. Je mets à jour la réponse. – fedepad

+0

Merci cela a fonctionné! –