Подключение сторонней библиотеки к cmake в qt
Сделал проект, для сериализации выбранной таблицы из бд Postgres с помощью библиотеки protobuf.
Так выглядит про файл (qmake)
QT += core gui sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
LIBS += -L/usr/lib/x86_64-linux-gnu -lprotobuf
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Сейчас я хочу перенести проект на cmake
В нем я уже подключил sql, но как подключить protobuf не понимаю (с cmake работаю впервые)
Cmake
cmake_minimum_required(VERSION 3.5)
project(proto-cmake VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Sql REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Sql REQUIRED)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(proto-cmake
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
else()
if(ANDROID)
add_library(proto-cmake SHARED
${PROJECT_SOURCES}
)
else()
add_executable(proto-cmake
${PROJECT_SOURCES}
)
endif()
endif()
target_link_libraries(proto-cmake PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)
set_target_properties(proto-cmake PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(proto-cmake)
endif()
Заранее спасибо за помощь
Ответы (1 шт):
Автор решения: Ingvar
→ Ссылка
В качестве примера - кусок cmake файла своего проекта:
if (WIN32)
#сборка под Windows
#-- В зависимости от типа сборки используем различные ветки, чтобы указывать реально существующие библиотеки
if (CMAKE_BUILD_TYPE STREQUAL Debug)
target_link_libraries(programm PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Charts
#libpq -- библиотека доступа к PostgreSQL включена в plgconnector
plgcommontypes
plgconnector
plgservice
plgcomponents
#-- Далее идут внешние библиотеки
TabToolbard
QXlsxQt${QT_VERSION_MAJOR}
advanceddocking
)
endif()
if (CMAKE_BUILD_TYPE STREQUAL Release)
target_link_libraries(programm PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Charts
#libpq -- библиотека доступа к PostgreSQL включена в plgconnector
plgcommontypes
plgconnector
plgservice
plgcomponents
#-- Далее идут внешние библиотеки
TabToolbar
QXlsxQt${QT_VERSION_MAJOR}
advanceddocking
)
endif()
endif(WIN32)
if (UNIX AND NOT APPLE)
#сборка под Linux (различие в библиотеках)
#следующая строка заставляет генерировать нормальный 'exe' для Linux
target_link_options(programm PUBLIC -no-pie)
target_link_libraries(programm PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Charts
#pq -- библиотека доступа к PostgreSQL включена в plgconnector
plgcommontypes
plgconnector
plgservice
plgcomponents
#-- Далее идут внешние библиотеки
TabToolbar
QXlsxQt${QT_VERSION_MAJOR}
advanceddocking
)
endif()
plgconnector имеет в своем cmake следующие строки со ссылкой на готовые библиотеки postgre - обратите внимание на разницу в указании для win/lin
if (WIN32)
target_link_libraries(plgconnector PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets
libpq.lib
)
endif(WIN32)
if (UNIX AND NOT APPLE)
target_link_libraries(plgconnector PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets pq)
endif()