Импортировать CMake Project в существующий QT Project .pro - PullRequest
0 голосов
/ 13 января 2020

У меня есть проект QT, над которым я работаю, в нем есть пара подмодулей, которые я перечисляю в файле .pro моего проекта как:

if(!include(module/my_module.pri)){
    error("module my_module not found")
}

Что я пробовал:

Ну, я нашел библиотеку, которую собираюсь использовать, которая является проектом CMake libcrashreporter-qt . Я просто связываю проект для полноты - в этой библиотеке нет ничего плохого (насколько мне известно)

Проблема:

Я понял, что я попробует включить файл CMakeLists.txt, как я бы .pri файл:

if(!include(libcrashreporter-qt/CMakeLists.txt)){
    error("module libcrashreporter-qt not found")
}

, где папка libcrashreporter-qt находится в root моего проекта

Какой-то код:

При этом я получаю массу ошибок компилятора:

$project_dir/libcrashreporter-qt/CMakeLists.txt:1: 'project' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:2: 'cmake_minimum_required' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:4: Extra characters after test expression.
$project_dir/libcrashreporter-qt/CMakeLists.txt:5: 'cmake_policy' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:6: 'endif' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:10: 'find_package' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:12: Opening parenthesis without prior test name.
$project_dir/libcrashreporter-qt/CMakeLists.txt:16: 'string' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:17: 'string' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:18: 'endif' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:20: 'add_subdirectory' is not a recognized test function.
$project_dir/libcrashreporter-qt/CMakeLists.txt:21: 'add_subdirectory' is not a recognized test function.

Содержимое файла CMake (обратите внимание, я слегка изменил файл, пытаясь решить проблемы со сборкой, удалив многострочное выражение if и прокомментировав строку option) :

project(libcrashreporter-qt)
cmake_minimum_required(VERSION 3.1)

if(POLICY CMP0071)
    cmake_policy(SET CMP0071 NEW)
endif()

#option(ENABLE_GPL_CODE OFF)

find_package(Qt5 COMPONENTS Core Network Widgets)

if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_FLAGS) OR (UNIX AND NOT APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
    # Breakpad uses GNU compiler extensions like typeof.
    # Luckily these features are not used on OSX, so we can build the
    # crashreporter there with the normal C++11 standard.
    string(REPLACE "-std=c++11" "-std=gnu++11" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
    string(REPLACE "-std=c++14" "-std=gnu++14" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
endif()

add_subdirectory(3rdparty)
add_subdirectory(src)

Это заставляет меня поверить существует проблема совместимости файлов Qt .pro и использования проектов CMake друг с другом.

Вопрос:

Как получить доступ к функциям библиотеки этого проекта CMake и скомпилируйте его с моим проектом (то есть без изменения самого проекта CMake), или как лучше конвертировать CMake проект на совместимый .pro проект ?

Ответы [ 2 ]

2 голосов
/ 13 января 2020

AFAIK CMake и QMake нельзя смешивать вместе в одном проекте, это две разные системы сборки, и если вы хотите использовать проект CMake в проекте QMake, у вас есть «две» опции:

  1. если вы хотите использовать исходные файлы (. cpp и .h) или даже изменить их в своем проекте, вы должны импортировать их в свой проект QMake (вы можете легко сделать это в своем QtCreator) и скомпилировать все файлы ваш проект
  2. , если используемая вами библиотека CMake не нуждается в каких-либо изменениях (в большинстве случаев так происходит при использовании сторонней библиотеки), и вы просто хотите импортировать ее в свой проект и связать его с вашим исполняемым файлом, вы просто запускаете и компилируете проект CMake (отдельно от вашего собственного проекта QMake), а затем используете выходную динамическую библиотеку c или stati c этого проекта для связи с вашим проектом QMake
0 голосов
/ 13 января 2020

Насколько я помню, в Qt вы можете указать пользовательские настройки компилятора для дополнительной цели, поэтому, если вам нужно перестроить ваш проект CMake непосредственно перед созданием целевого приложения Qt, вы можете попробовать использовать этот способ

Возможное решение здесь:

{ ссылка }

...