Задать вопрос
EgoRusMarch
@EgoRusMarch
C++ Developer

Как подключить стороннюю библиотеку к проекту Qt через CMake?

Создал проект на системе CMake.
Открываю CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(yfx 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_CXXSTANDARD_REQUIRED ON)

find_package(Qt5 COMSHAREDPONENTS Widgets REQUIRED)

if(ANDROID)
    add_library(yfx SHARED main.cpp yfx.cpp yfx.h yfx.ui)
else()
    add_executable(yfx main.cpp yfx.cpp yfx.h yfx.ui)
endif()

target_link_libraries(yfx PRIVATE Qt5::Widgets)

Подскажите, пожалуйста, куда и как мне добавить хэдеры и саму библиотеку?
И можно ли каким-то образом обойтись без dll, имея исходный код?
Может быть можно создать подпроект (со своим CMakeLists.txt) и сделать так, чтобы он компилировался, линковался и собирался в библиотеку непосредственно из Qt? (Чтобы можно было поменяв одну команду SHARED на STATIC, менять способ сборки всего основного проекта)

Я прочитал кучу всего в сети, и у меня просто каша в голове, не могу сообразить, что и как сделать =(
  • Вопрос задан
  • 2050 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
@res2001
Developer, ex-admin
Конечно же в target_link_libraries, просто добавьте имя библиотеки в конце через пробел
Но обычно используют find_package/find_library/pkg_check_modules для того, что бы предварительно определить установлена ли библиотека в системе. А в target_link_libraries добавляют переменные, которые инициализируются этими функциями.
Смотрите: https://cmake.org/cmake/help/latest/genindex.html
Ответ написан
EgoRusMarch
@EgoRusMarch Автор вопроса
C++ Developer
Подключил таким образом:
  • добавил каталог собранной библиотеки в каталог проекта
  • открыл CMakeLists.txt в своём проекте и дописал:
    target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/path_to_include_dir)
    target_link_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/path_to_link_dir)
    target_link_libraries(${PROJECT_NAME} PUBLIC libname)

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы