Связать библиотеки MySQL в CMake

#c #mysql #makefile #cmake

#c #mysql #makefile #cmake

Вопрос:

Я начинаю изучать, как использовать CMake, но у меня было несколько проблем со связывающими библиотеками. Теперь моя проблема с MySQL (C). Поскольку по умолчанию существует файл FindMySQL.cmake, я включил тот, который я нашел, однако это не решает проблему, потому что мои библиотеки находятся в отдельных папках внутри проекта.

Структура моего проекта:

/

/ CMakeLists.txt

/ включить

/include/mysql (…)

/lib (libmysql.lib, mysqlclient.lib, libmysql.dll )

/src (main.cpp )

/src/login (login.cpp , логин.h)

/build (каталог сборки CMake)

Извините за отсутствие организации, но прошло много времени с тех пор, как у меня возникла эта проблема, и я использую «angry».

Мои текущие списки CMakeLists:

 # eGest - Product Sales by Console
# Copyright (C) 2011 Bruno Alano
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
# --------------------------------------------------------------------------
# CMake - Build System

# Minium CMake Version
cmake_minimum_required (VERSION 2.6)

# Project Name
project (egest)

# Add MySQL
# find_package(MySQL REQUIRED)
include_directories(include)
set(CMAKE_LIBRARY_PATH /lib)
set(LIBS ${LIBS} mysql)

# Include Directory
include_directories(src)

# Link the MySQL
# Add Sources
add_executable(test src/egest.cpp src/login/login.cpp)
target_link_libraries(test ${LIBS})
 

Но если я использую это, верните эту ошибку:

 C:UsersALANOeGestbuild>cmake .. -G "MinGW Makefiles"
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: C:/MinGW/bin/gcc.exe
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: C:/MinGW/bin/g  .exe
-- Check for working CXX compiler: C:/MinGW/bin/g  .exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/ALANO/eGest/build

C:UsersALANOeGestbuild>make
Scanning dependencies of target test
[ 50%] Building CXX object CMakeFiles/test.dir/src/egest.cpp.obj
[100%] Building CXX object CMakeFiles/test.dir/src/login/login.cpp.obj
Linking CXX executable test.exe
c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/bin/ld.exe: cannot fin
d -lmysql
collect2: ld returned 1 exit status
make[2]: *** [test.exe] Error 1
make[1]: *** [CMakeFiles/test.dir/all] Error 2
make: *** [all] Error 2
 

Спасибо, Бруно Алано.

Ответ №1:

CMAKE_LIBRARY_PATH это место, где CMake помещает библиотеки, которые он создает, а не там, где он ищет существующие библиотеки.

Попробуйте добавить link_directories("${PROJECT_SOURCE_DIR}/lib") раньше add_executable .

Затем сделайте make VERBOSE=1 , чтобы увидеть, какие параметры компилятора передаются — надеюсь, одним из них будет -L (путь поиска библиотеки), который вы только что добавили.

Комментарии:

1. Извините, но не работает. Вывод с ПОДРОБНЫМ = 1. heypasteit.com/clip/01WZ

2. Я обновил свой ответ лучшим (и более удобным) способом сделать это. Пожалуйста, попробуйте это и посмотрите, поможет ли это.