Каковы различия и сходства между CMake и qmake?

я бы хотел знать причины использования CMake для конкретного проекта поверх qmake и наоборот.

Просто каковы плюсы и минусы обеих систем сборки? Я искал и нашел несколько документов, но мне трудно понять.

26

Решение

Обе системы сборки, но они не очень похожи. Если ваш проект использует Qt, вам, вероятно, лучше всего использовать qmake. CMake более универсален и подходит практически для любого типа проекта.

И qmake, и CMake генерируют Makefile, который читает make построить проект. Не все системы сборки генерируют Makefile, но многие это делают. Даже Makefile — это тип системы сборки; он сообщает компилятору и компоновщику, что делать, чтобы создать исполняемый файл (или динамическую или статическую библиотеку).


Если ваш проект использует Qt, но вы не хотите использовать qmake, вам придется сделать еще несколько вещей самостоятельно:

  • работает Мета-объектный компилятор (МОС)
  • включить пути (указать компилятору, где искать заголовки Qt)
  • линкование (укажите компоновщику, где искать библиотеки Qt)

Итак, вам придется проделать немного больше работы для создания проекта Qt без qmake, но это возможно, и это многому научит вас, как Qt и qmake делают вещи.

От себя лично (примите это только как рекомендацию, проведите дальнейшие исследования самостоятельно): я не большой поклонник qmake. Это поможет вам с Qt, но кроме этого я обнаружил, что он довольно ограничен.


В любом случае, я бы порекомендовал научиться создавать небольшой проект (~ 10 исходных файлов) без использования какой-либо системы сборки. Не используя CMake, не с Makefile, просто используя компилятор и компоновщик напрямую. Вы не должны на самом деле создавать какой-либо реальный проект таким образом, но вы должны научиться делать это, просто чтобы узнать, что на самом деле делают системы сборки. Знание того, что они делают, облегчит их использование.


Несколько месяцев назад мы переключили проект с qmake на Premake, что тоже стоит посмотреть. Он хорошо подходит для сценариев (с Lua), что прекрасно, когда вам нужно настроить процесс сборки.

Тем не менее, это немного более «ручное» руководство, поэтому подготовьтесь к тому, чтобы узнать, как компиляция и компоновка работают на более базовом уровне, без использования системы сборки. Он также находится в бета-версии (Premake 5), поэтому некоторые кусочки по-прежнему отсутствуют.

Вы также можете взглянуть на ООК, который должен быть лучше qmake. Он все еще находится на стадии бета-тестирования, поэтому я бы подождал, пока он созреет и станет проще в использовании.

25

Другие решения

CMake — безусловно, самая мощная система сборки. Синтаксис «не очень хороший», мягко говоря. Но тогда для любого сложного проекта то, что нужно делать с QMake (или любой системой сборки, о которой я знаю), чтобы добиться чего-то, тоже нехорошо. Для простых проектов QMake лучше смотреть.

Если вам нужны проверки конфигурации для сторонних зависимостей, отличных от Qt, CMake — то, что вам нужно, поддержка проверок конфигурации в QMake минимальна или вообще отсутствует.

С другой стороны, QMake прекрасно работает с Qt Creator (там нет поддержки CMake, хотя можно использовать CMake с Creator).

Если вы хотите создавать и развертывать для iOS и Android из Qt Creator, я настоятельно рекомендую QMake. (Не уверен, что это возможно даже в наши дни с CMake — это, безусловно, вызовет гораздо больше головной боли).

15

CMake поможет вам создать файлы конфигурации для многих систем сборки («система сборки» называется Генераторы в CMake). Увидеть Что такое генератор CMake?.

Это означает, что если у вас есть набор источников C / C ++ и хорошо написано CMakeLists.txt, вы можете использовать CMake для создания проектов для различных систем сборки (IDE на основе командной строки), таких как Visual Studio, CodeBlocks, g ++ …
С CMake вы можете выбрать IDE и компилятор, который будете использовать в конце, и «легко» переключаться между поддерживаемыми.

qmakeНасколько я знаю, QtCreator будет поддерживать только в качестве IDE (он оставил сторонний компилятор в фоновом режиме: nmake из Visual Studio, g ++, MinGW …). Но вы не будете генерировать решение Visual Studio (файл sln), используя qmake, Это основное ограничение, которое я вижу в qmake (потому что я ненавижу QtCreator … Visual Studio гораздо более мощный и интуитивно понятный … но это только мое мнение).

Это так qmake облегчает компиляцию приложений на основе Qt (поскольку изначально поддерживается MOC, .ui и привязка к Qt), чем CMake, Но в любом случае это выполнимо CMake (есть встроенные функции для интеграции с Qt). Только ваш CMakeLists.txt, возможно, придется немного переделать при переходе на новые выпуски Qt (мне было трудно при переходе с Qt4 на Qt5, я думаю, что используя qmake делает это проще).

Personnaly, я использую CMake для моей среды сборки и, когда мне нужно использовать QtCreator (в основном для развертывания Android), я делаю CMake Скрипты генерируют файл .pro для qmake / QtCreator. Это работает хорошо, потому что qmake Синтаксис файла .pro действительно прост. Тогда я не привязан к конкретной IDE.

7

Я использую CMake для своих проектов Qt и очень доволен им. В частности, у меня есть следующее в моем CMakeLists.txt:

set(QT_VERSION_REQ "5.2")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Core ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Quick ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Widgets ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Gui ${QT_VERSION_REQ} REQUIRED)

set(CMAKE_AUTOMOC ON)
QT5_WRAP_UI( UI_HDRS ${UI_FILES} )

ADD_EXECUTABLE(${MOC_HEADERS})

target_link_libraries(${PROJECT_NAME}
Qt5::Core
Qt5::Quick
Qt5::Widgets
Qt5::Gui
)

Я надеюсь, что это поможет, если вы решите пойти с CMake.

6

QMAKE

  • Сосредоточена на проектах, использующих Qt
  • Файл проекта легко генерируется QtCreator (хорошо для начинающих)
  • Поддерживается QtCreator

CMake

  • Используется в широком спектре проектов
  • Поддерживает множество платформ и языков
  • Поддерживается несколькими IDE: например QtCreator, Visual Studio
  • Создает описание проекта для нескольких IDE
  • Содержит команды, облегчающие использование Qt (самое важное: automoc)

Моя рекомендация: используйте qmake, если QtCreator — ваша IDE, и вы начинаете с Qt или C ++. Используйте cmake, если вы хотите делать какие-то сложные вещи в вашей сборке.

И qmake, и CMake работают одинаково. Увидеть http://www.th-thielemann.de/development/cmake/cmake_qmake_to_cmake.html для учебника по миграции с qmake на CMake.

3
По вопросам рекламы [email protected]