Oh, ok. It works (had to solve some conflicting definitions between OpenCV and MySQL libraries, but I managed that).
Thanks a lot! I would excuse the the obvious issue with mainexe by stating it's late (3AM here), but I'm a night-owl, so that's not really an excuse... should be more sharp next time ;) Peleg On Thu, Apr 30, 2015 at 2:50 AM, Daniel Schepler <[email protected]> wrote: > OK, my target_link_libraries() line was just an example not knowing your > executable name - you'd want to update it to > target_link_libraries(entity_find_visual ${MYSQL_LIBRARY}) . (And > personally, I'd group the find_package calls together, then combine the > target_link_libraries lines into one - > target_link_libraries(entity_find_visual ${OpenCV_LIBS} ${MYSQL_LIBRARY}).) > -- > Daniel > ________________________________________ > From: Peleg Bar-Sapir [[email protected]] > Sent: Wednesday, April 29, 2015 5:29 PM > To: Daniel Schepler > Cc: [email protected] > Subject: Re: [CMake] Linking to MySQL C++ Connector libraries using extra > flags, Ubuntu 14.04 LTS, gcc > > For some reasons, now the "cmake ." command doesn't work either. I > haven't yet begun debugging, but I played a bit with the > CMakeLists.txt file, and then returned it to it's original state, with > your added lines (replacing mariadb with mysqldb, of course). > Now I get this error: > > $ cmake . > CMake Error at CMakeLists.txt:9 (target_link_libraries): > Cannot specify link libraries for target "mainexe" which is not built by > this project. > > The CMakeLists.txt looks like this: > > cmake_minimum_required(VERSION 2.8) > project( entity_find_visual ) > find_package( OpenCV REQUIRED ) > add_executable( entity_find_visual entity_find_visual.cpp) > target_link_libraries( entity_find_visual ${OpenCV_LIBS} ) > set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} > "${CMAKE_SOURCE_DIR}/cmake/Modules/") > find_package(MySQL REQUIRED) > include_directories(${MYSQL_INCLUDE_DIR}) > target_link_libraries(mainexe ${MYSQL_LIBRARY}) > > (a bit ugly, I know, but it worked before). > > I'm quite puzzled now, I must admit. > > On Thu, Apr 30, 2015 at 1:50 AM, Daniel Schepler > <[email protected]> wrote: >> I'd put debugging statements in to see what is being returned as >> MYSQL_INCLUDE_DIR and MYSQL_LIBRARY; and if those look correct, I'd run >> "make VERBOSE=1" to check exactly what's on the compilation command line. >> -- >> Daniel >> ________________________________________ >> From: Peleg Bar-Sapir [[email protected]] >> Sent: Wednesday, April 29, 2015 4:46 PM >> To: Daniel Schepler >> Cc: [email protected] >> Subject: Re: [CMake] Linking to MySQL C++ Connector libraries using extra >> flags, Ubuntu 14.04 LTS, gcc >> >> Hello Daniel, >> >> Thanks for your help. >> I took your file and plagiarized it, replacing >> "MariaDB"/MARIADB"/"mariadb" with "MySQL"/"MYSQL"/"mysql" accordinly - >> and did the same for the CMakeLists.txt (I put FindMySQL.cmake in >> /CMake/Modules). Running 'cmake .' now gives no error, but running >> make gives me still the linking error: >> >> $ make >> [100%] Building CXX object >> CMakeFiles/entity_find_visual.dir/entity_find_visual.cpp.o >> /home/[...]/find_visual/entity_find_visual.cpp:17:19: fatal error: >> mysql.h: No such file or directory >> #include <mysql.h> >> ^ >> compilation terminated. >> make[2]: *** [CMakeFiles/entity_find_visual.dir/entity_find_visual.cpp.o] >> Error 1 >> make[1]: *** [CMakeFiles/entity_find_visual.dir/all] Error 2 >> make: *** [all] Error 2 >> >> This is almost exactly what happens when I run a Makefile without the flag: >> >> $make foo >> g++ foo.cpp foolib.cpp -o foo `pkg-config --cflags --libs gsl` -std=c++11 >> In file included from foo.cpp:5:0: >> foolib.h:16:23: fatal error: my_global.h: No such file or directory >> #include <my_global.h> >> ^ >> compilation terminated. >> >> Am I missing something? >> >> Peleg >> >> On Thu, Apr 30, 2015 at 12:52 AM, Daniel Schepler >> <[email protected]> wrote: >>> I'd say that most of the output of mysql_config --cflags and mysql_config >>> --libs is a bug - for the shared library, there's no need to explicitly >>> include the pthread etc. libraries (unless, of course, your program also >>> uses them directly). In CMake terms, they should have been PRIVATE >>> dependencies of the shared library, rather than PUBLIC. (I don't seem to >>> have been able to convince the MariaDB Connector/C developers of that, >>> though...) >>> >>> I'm attaching a file I wrote for our project to enable: >>> find_package(MariaDB REQUIRED) >>> include_directories(${MARIADB_INCLUDE_DIR}) >>> target_link_libraries(mainexe ${MARIADB_LIBRARY}) >>> -- >>> Daniel Schepler >>> ________________________________________ >>> From: CMake [[email protected]] on behalf of Peleg Bar-Sapir >>> [[email protected]] >>> Sent: Wednesday, April 29, 2015 2:56 PM >>> To: [email protected] >>> Subject: [CMake] Linking to MySQL C++ Connector libraries using extra >>> flags, Ubuntu 14.04 LTS, gcc >>> >>> Hello, >>> >>> First, I would like to point out that I'm new to CMake, and I'm not a >>> professional programer by any means - just a Physics research student. >>> I looked for answers to my issue online, but couldn't find anything >>> that helped me. I also asked my peers and friends, but unfortunately >>> none of them could find an answer as well. >>> >>> I want to use MySQL connector for C++ in a program. Usually I do this >>> by using the 'mysql' and 'my_global' libraries, and then run gcc with >>> this added flag: `mysql_config --cflags --libs`. >>> Typing this command into my console results in: >>> >>> $mysql_config --cflags --libs >>> -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -DNDEBUG >>> -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -ldl >>> >>> meaning there are some linking flags that must be given so gcc would >>> compile my code, apart from just "-lmysql" or "-l/usr/include/mysql". >>> >>> My question is how do I ensure this works also with CMake? I >>> understand how to use the CMakeLists.txt file to configure additional >>> external libraries, but none of them require special flags as above, >>> at least in my basic use of them. Since there's no module for MySQL >>> connector, I'm a bit lost here. >>> >>> Could anyone please give me a some advices, or point me to what should be >>> done? >>> >>> >>> Thanks, >>> >>> Peleg Bar Sapir >>> -- >>> >>> Powered by www.kitware.com >>> >>> Please keep messages on-topic and check the CMake FAQ at: >>> http://www.cmake.org/Wiki/CMake_FAQ >>> >>> Kitware offers various services to support the CMake community. For more >>> information on each offering, please visit: >>> >>> CMake Support: http://cmake.org/cmake/help/support.html >>> CMake Consulting: http://cmake.org/cmake/help/consulting.html >>> CMake Training Courses: http://cmake.org/cmake/help/training.html >>> >>> Visit other Kitware open-source projects at >>> http://www.kitware.com/opensource/opensource.html >>> >>> Follow this link to subscribe/unsubscribe: >>> http://public.kitware.com/mailman/listinfo/cmake >>> >> > -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake
