Подтвердить что ты не робот

Лучшие практики для "кросс-платформенного" развития с Qt

Согласно qt.nokia.com, Qt является "кросс-платформенным приложением и интерфейсом пользовательского интерфейса", что позволяет вам "писать код один раз для целевого несколько платформ". Qt SDK - это "полная среда разработки", содержащая "инструменты, необходимые для создания кросс-платформенных приложений с Qt в одной установке". Qt Creator - это "кросс-платформенная среда разработки", которая "работает в операционных системах Windows, Linux/X11 и Mac OS X и позволяет разработчикам создавать приложения для нескольких платформ для настольных компьютеров и мобильных устройств".

Магические слова "кросс-компиляция" не упоминаются явно в этих блогах. Тем не менее, наивный читатель может быть прощен за то, что вы можете скачать Qt SDK (включая Qt Creator) для любой хост-системы, которую вы используете для разработки, создать проект и написать код, из которого вы можете легко создавать исполняемые файлы для Windows, Linux, Mac и т.д. "Легко" я имею в виду что-то вроде отметки некоторых флажков в диалоговом окне настроек сборки и нажатия кнопки "Создать".

Я все еще ищу эти флажки! Между тем, я нашел различные сообщения здесь и в другом месте об установке кросс-компилятора, установке дополнительных двоичных файлов, перезаписи вашего файла qmake и т.д. Из маркетинга я вроде бы ожидал, что кросс-компиляция уже будет полностью и напрямую поддерживаться с помощью "готовая" установка инструментов IDE и SDK. Мне что-то не хватает?

Если нет, у меня есть машины для разработки, доступные со всеми тремя операционными системами. Должен ли я просто установить Qt Creator на всех трех платформах? Если я это сделаю, могу ли я ожидать, что смогу взять проект Qt (или, возможно, только исходный код), который я разработал с помощью Qt Creator, скажем, Windows, скопировать его на компьютер Mac или Linux и построить его там, используя версию Qt Creator для этой платформы, не сталкиваясь с некоторыми серьезными проблемами? Может быть, даже лучше всего использовать Qt для создания исполняемых файлов для нескольких платформ, а также для установки инструментов кросс-компиляции на одном хосте разработки?

4b9b3361

Ответ 1

Qt tagline:

Напишите один раз, скомпилируйте всюду.

Учитывая это, Qt официально не предлагает никакого из готового решения для кросс-компиляции приложений Qt с конкретной платформы на другие платформы. Хотя определенно делать, если много работы и времени будет инвестировано, Qt хорошая обычная практика предложит вам создать приложение Qt непосредственно на целевой платформе. Это означает, что для вашей цели Windows для вашего приложения будет установлена ​​машина Windows, ваша целевая точка Mac на компьютере Mac и целевой листе Linux, как вы уже догадались (-), Linux-машине.

Таким образом "Напишите один раз, скомпилируйте всюду", на мой взгляд, это очень хорошо подобранная комбинация слов. В противном случае строка тега могла бы быть: "Напишите один раз, скомпилируйте для всего".

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

Что касается других вопросов, на которые прямо не ответил ваш вопрос:

Должен ли я просто установить Qt Creator на все три платформы? Если я это сделаю, могу Я ожидаю, что смогу взять Qt проекта (или, возможно, только источника код), который я разработал с использованием Qt Создатель, скажем, Windows, скопируйте его на мой компьютер Mac или Linux, и постройте его там, используя версию Qt Создатель для этой платформы, без столкнувшись с некоторыми серьезными проблемами?

Да. Незначительные проблемы - это то, как правильно использовать исполняемые файлы/исполняемые файлы приложений на всех трех основных платформах (Windows, Linux, Mac) или в Mac Dock с расширенной интеграцией или в панели лотков. Проблемы интеграции между ними. Эти проблемы могут быть устранены без нарушения кроссплатформенной характеристики вашего кода, путем надлежащего инкапсулирования вашего кода на платформе в директивы компилятора, например, #define. Я также рекомендую сделать это для любого другого конкретного кода платформы, который требуется вашему приложению, или если вы будете широко использовать код конкретной платформы, разделяя целые блоки связанного с конкретной платформой кода на несколько динамически загружаемых библиотек (или разделяемых библиотек), специфичных для каждой платформы, но экспортируя один и тот же абстрактный общий интерфейс и загружая/привязывая к ним по мере необходимости.

Может быть, даже лучшая практика для использования Qt для создания исполняемых файлов для несколько платформ, а также установка инструменты кросс-компиляции на одном хост разработки?

Вы должны использовать Qt SDK (Qt Creator или инструменты командной строки) для создания своего приложения, где это возможно, поскольку такие инструменты, как qmake, берут на себя бремя обработки файлов .moc вручную в ваших файлах Makefile. Но если это становится невозможным по нескольким причинам, например. как ваша компания, внедряющая разработку Visual Studio (кросс-платформенная ха-ха?), есть много учебников по тому, как обрабатывать сборки на основе Qt, используя такие системы сборки, как MS Visual Studio, GNU autotools или CMake. Хотя я бы порекомендовал придерживаться qmake, который является хорошим генератором make makefile и легко адаптируется к любым взломам платформы, которые могут потребоваться для вашего приложения для правильной сборки, а не с использованием системы сборки, которая более удобна для определенных хакеров платформы а затем попытаться удовлетворить потребности Qt для этих систем сборки. В конце концов, если вы разрабатываете свое приложение в Qt по причинам, связанным с платформой, то Qt должен быть основной базой для вашего приложения, а не специфичными для платформы api/code или сторонними библиотеками, которые вы могли бы использовать.

Надеюсь, я был достаточно ясным и полезным.

PS: Я также приветствую предложения или исправления/дополнения относительно того, что я написал в комментариях.

Ответ 2

Вы можете использовать MinGW для кросс-компиляции в Linux для Windows. Из-за технических проблем перекрестная компиляция на Mac невозможна. Нет простого способа сделать это из графического интерфейса, но здесь - это хороший способ перекрестного компиляции QtWebKit для Windows. Это можно применить к любому проекту Qt.

Ответ 3

Я не думаю, что есть кросс-компиляция конфигурации.

О переносимости полного проекта я бы сказал "почти", потому что нашел несколько неприятных сбоев. Тем не менее, ваш исходный код будет на 100% переносимым и перекомпилировать на другой платформе, просто потребуются некоторые трюки в .pro.

То, что я делаю, работает только с одной платформой (Linux) и время от времени компилируется с использованием моей Windows-машины и моего Mac Mini. То, что я обычно вступаю в борьбу, - это всего лишь несколько указаний о том, где искать внешние библиотеки или включать файлы. Также, работая на Mac, я должен скопировать внешние файлы в комплекте приложений, чтобы программа могла их найти.

Ответ 4

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

Возможно, кто-то еще предоставит лучший вопрос, но я не думаю, что вам что-то не хватает.

Ответ 5

Я не знаю о системах Linux. Но для разработки приложения Qt, ориентированного на Mac OS X и Windows, для каждого из них требуется машина разработки. Там нет кросс-компиляции для двух.

Qt является кросс-платформенным в том смысле, что одни и те же исходные файлы могут создавать приложения для разных платформ. При наличии всех виртуальных машин одна (физическая) установка машины для разработки и создания нескольких целей не должна быть слишком большой проблемой. Фактически, именно так я работаю над своим текущим проектом, который ориентирован как на Mac, так и на Windows.

Ответ 6

Кросс-компиляция обычно используется для разработки программного обеспечения на главной системе Linux и компиляции для целевой системы Linux. В течение многих лет я использовал систему Linux, работающую на x86 с X11 (KDE), чтобы скомпилировать наше приложение Qt для встроенной системы ARM с Qt Embedded. Если вы используете мобильные приложения, вы, вероятно, используете кросс-компиляцию. Конечно, вы можете перекрестно скомпилировать систему Windows. Все, что вам действительно нужно, это кросс-компилятор. Поскольку gcc доступен в исходном коде, кросс-компиляторы gcc довольно распространены. Для выполнения кросс-компиляции с Qt вам нужен mkspec для qmake, который указывает, какие компиляторы использовать.

В последнем абзаце указано, что вы, вероятно, не сможете сделать такой кросс-компиляцию - вы можете сделать это на своей машине Windows для Linux или, возможно, для Mac, и вы, вероятно, можете сделать это в Linux для Windows если вы используете стандартную версию Qt для Windows, но вы никогда не будете компилировать приложение на основе Microsoft-компилятора для Linux или Mac для Windows.

Нижняя строка - сделайте то, что вы указали. Получите ваш источник на каждой целевой платформе и скомпилируйте его там.