[CMake] Linking to MySQL C++ Connector libraries using extra flags, Ubuntu 14.04 LTS, gcc

Peleg Bar-Sapir pelegs at gmail.com
Wed Apr 29 20:29:40 EDT 2015


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
<dschepler at scalable-networks.com> 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 [pelegs at gmail.com]
> Sent: Wednesday, April 29, 2015 4:46 PM
> To: Daniel Schepler
> Cc: cmake at cmake.org
> 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
> <dschepler at scalable-networks.com> 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 [cmake-bounces at cmake.org] on behalf of Peleg Bar-Sapir [pelegs at gmail.com]
>> Sent: Wednesday, April 29, 2015 2:56 PM
>> To: cmake at cmake.org
>> 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
>>
>


More information about the CMake mailing list