Подключение сторонней библиотеки к 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()
→ Ссылка