Как добавить соединитель C ++ и повысить до Clion проекта на Windows 10 - PullRequest
0 голосов
/ 01 октября 2019

Я настраиваю новый сервер для приложения c ++, и мне нужно взаимодействовать с БД. Мне нужно включить соединитель c ++ и повысить в моем проекте, но это не работает.

Повышение извлечено в: C:\boost_1_71_0

Mysql соединитель установлен в: C:\Program Files\MySQL\MySQL Connector C++ 8.0

cmake_minimum_required(VERSION 3.14)
project(shared-editor-server)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR C:/Program Files/MySQL/Connector C++ 8.0)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/jdbc)
include_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/jdbc/cppconn)
link_directories(${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/lib64/vs14)
set(
        SOURCE_FILES

        ${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/jdbc/*.h
        ${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/jdbc/cppconn/*.h
        ${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/lib64/vs14
)



add_executable(shared-editor-server ${SOURCE_FILES} main.cpp connectDB.cpp server.cpp server.h connectDB.h)

#include "mysql_driver.h" говорит, что файл не найден. То же самое для других .h файлов.

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Если c ++ mysql-коннектор не работает для вас, я предлагаю прочитать больше о зависимости коннектора от компилятора.

> код, использующий библиотеки Connector / C ++, должен быть собран с той же версией компилятора, что и сам коннектор. Информация о версии компилятора, используемой для создания библиотек коннекторов, может быть найдена в файле INFO_BIN, распространяемом с коннектором.

У меня были проблемы в cLion только из-за компилятора, я изменил cLion на VS, и он решилмоя проблема.

1 голос
/ 01 октября 2019

Ваш путь к соединителю MySQL содержит пробелы, поэтому при определении переменной заключите путь в кавычки:

set(FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR "C:/Program Files/MySQL/Connector C++ 8.0")

Кроме того, поскольку вы использовали вызовы include_directories(), включая заголовки сSOURCE_FILES представляется избыточным. Если вы пытаетесь вставить эти заголовки в IDE, скажем, CLion, лучше всего перечислить каждый заголовок отдельно (как вы сделали с файлами .cpp). Перечисление заголовков как *.h в вызове set не будет работать.


На основании ваших отзывов у меня есть несколько предложений по дальнейшей настройке файла CMake:

  1. Вы устанавливаете стандарт C ++ на C ++ 17 с помощью CMAKE_CXX_STANDARD, а затем сразу же пытаетесь установить его на C ++ 11 с помощью CMAKE_CXX_FLAGS. Они противоречивы, поэтому выберите только один.
  2. Файлы, предоставленные для add_executable(), должны быть только исходными (.cpp) файлами. Заголовки будут включены через другие ваши вызовы CMake.
  3. Используйте target_include_directories() вместо include_directories(), чтобы применять включенные каталоги только к определенной цели, а не все целей. Таким образом, другие цели, обрабатываемые вашим CMake, не перегружаются включениями.
  4. Если вы хотите связать библиотеку MySQL Connector с вашим исполняемым файлом, используйте target_link_libraries(), чтобы предоставитьпуть к библиотеке, на которую вы хотите сослаться.

Соединив это, вы получите что-то вроде этого:

cmake_minimum_required(VERSION 3.14)
project(shared-editor-server)
# Choose only one of these standards.
set(CMAKE_CXX_STANDARD 17)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR "C:/Program Files/MySQL/Connector C++ 8.0")

# You only really need to include your source files here.
add_executable(shared-editor-server 
    main.cpp 
    connectDB.cpp 
    server.cpp
)

# Add the MySQL include directories to this target.
target_include_directories(shared-editor-server PRIVATE 
    ${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/jdbc
)
target_include_directories(shared-editor-server PRIVATE 
    ${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/include/jdbc/cppconn
)

# Link the MySQL library to your executable.
target_link_libraries(shared-editor-server PRIVATE 
    ${FULL_PATH_TO_MYSQL_CONNECTOR_CPP_DIR}/lib64/vs14/mysqlcppconn8.lib
)
...