Пользователь
0,0
рейтинг
7 мая 2009 в 09:43

Рисоваська под Mac (как собрать Qt-приложение под Mac OS X)

Upd. Чтобы помочь в тестировании под разные дистрибутивы Linux — подключайтесь в группу «Друзья Рисоваськи»

Еще в начале января я собрал первую работающую версию Рисоваськи под Mac и лишь два дня назад появилась версия, которую не стыдно показывать другим людям. Сначала расскажу почему же портирование на Mac заняло так много времени, а потом — как собрать проект на Qt под Mac OS X

Почему так долго


В команде не было Mac-эксперта

Как-то так получилось, что вся команда Рисоваськи была мало знакома с Mac OS X — использовали Ubuntu и Windows. Мы купили пару Mac Book'ов в прошлом году, но пользовались ими лишь как дополнительными инструментами. И только когда наш давний друг и опытный маковод Валерий Хиора взялся нам помогать, дело сдвинулось с мертвой точки. Особенно неоценимой была его помощь при сборке Universal-версии — я раз пять пытался собрать её наскоком, без глубокого понимания внутренних механизмов, и у меня каждый раз чуть-чуть не получалось. Зато теперь я умею читать config.log :)

Есть ошибки в работе Qt (4.5.0 и 4.5.1) под Mac OS X

Подозреваю, что немногие пишут Mac-программы с использованием C++ и Qt. Видимо, в основном используют нативные инструменты — Objective-C, Cocoa. То тут, то там в Qt встречаются мелкие недоделки, разное поведение стилей и лэйаутов и прочие неприятности.

XCode очень сильно отличается от Visual Studio

Совершенно другие схемы интерфейса, совершенно другая (очень слабая) поддержка Qt. Пока не привыкнешь — уходит много времени на самые простые действия. Более того, поскольку это всё же Unix, поэтому многие вещи нужно выносить в командные файлы, а не совершать их каждый раз руками, что тоже отличает разработку в Mac OS X от разработки в Windows. Я лично очень полюбил консоль.

Mac OS X — это совсем другой мир

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

Краткое руководство под сборке Qt проекта на Mac OS X


Если вы написали какое-то приложение под Windows с использованием Qt и хотите собрать его под Mac OS X, то вот вам краткая инструкция:

1. Устанавливаем последнюю версию XCode, вместе с ней устанавливается компилятор gcc

2. Качаем Qt — www.qtsoftware.com/downloads, мы качали Framework Only (122 Mb)

3. Собираем Qt с учетом специфики проекта (мы собирали статическую версию):

cd /tmp/qt-mac-opensource-desktop-4.5.1
./configure -prefix /Developer/Qt -qt-zlib -qt-libpng -qt-libjpeg -svg -qt-libtiff
-qt-libmng -qt-gif -qt-sql-sqlite -openssl -universal -sdk /Developer/SDKs/MacOSX10.4u.sdk -static -release

-prefix /Developer/Qt — куда устанавливать Qt
-qt-zlib -qt-libpng -qt-libjpeg -svg -qt-libtiff -qt-libmng -qt-gif -qt-sql-sqlite — список подключаемых Qt-плагинов
-openssl — собираем с поддержкой openssl (его нужно установить заранее)
-universal — чтобы работало на процессорах Intel и PowerPC
-sdk /Developer/SDKs/MacOSX10.4u.sdk — путь к SDK 10.4 universal
-static — статическая версия
-release — только релиз-версия, потому что основные баги Qt мы уже отладили

make -j 4 sub-src
sudo make install

-j 4 — собирать в 4 потока, ускоряет сборку при наличии двухядерного процессора, правда и машину нагружает
sub-src — собирать только «ядро» Qt, не собирать всякие примеры и дополнительные утилиты

Добавляем в ~/.bash_profile:
PATH="/Developer/Qt/bin:$PATH"
export PATH
export QTDIR=/Developer/Qt
export QMAKESPEC=macx-g++

Всё, Qt установлена.

4. Сгенерировать файл проекта XCode

Файлы проекта под Windows — обычно .sln и .vcproj. В них указано какие файлы относятся к проекту, какие дополнительные библиотеки подключать и т.п. Нам нужно создать такой же файл, но для XCode. Хорошая новость — собирать его вручную каждый раз при изменении проекта не придется, потому что этот процесс можно автоматизировать.

Допустим что у нас проект состоит из двух папок — MoodBox (UI, сеть и всё остальное) и Velasquez (рисовальный движок). Под Windows у нас есть MoodBox.vcproj, который включает все необходимые файлы из папки Velasques

4.1 Создаем в любимом редакторе файл с описанием проекта MacOS.pro

# тут мы подключаем файлы с переводами
TRANSLATIONS = moodbox_en.ts \
moodbox_ru.ts

# настройки Qt и плагинов
QT += network xml svg
QTPLUGIN += qjpeg qgif qmng qsvg qtiff

# задаем иконку для проекта и имя приложения
ICON = moodbox-dock.icns
TARGET = MoodBox

# добавляем пути include и библиотеки
INCLUDEPATH += /sw/include/ImageMagick /sw/include/ImageMagick/Magick++
LIBS += -lMagick++ -lMagickCore -lMagickWand
LIBS += -L/sw/lib/

# указываем DEBUG, чтобы легче отлаживаться
DEFINES += DEBUG

# добавляем необходимые данные в bundle
data.path = Contents/Resources
data.files = $$(PWD)/Avatars $$(PWD)/Clipart $$(PWD)/Sound $$(PWD)/catalogue.pal
QMAKE_BUNDLE_DATA += data

QMAKE_INFO_PLIST = MoodBox_Info.plist

# убираем то ненужное, что лежит в папке MoodBox, но не нужно для сборки проекта
HEADERS -= _PaletteConverter/stdafx.h \
_PaletteConverter/targetver.h

SOURCES -= _PaletteConverter/PaletteConverter.cpp \
_PaletteConverter/stdafx.cpp \
qtsingleapplication_win.cpp \
qtsingleapplication_x11.cpp

# добавляем нужные файлы из проекта Velasquez

HEADERS += ../../Velasquez/Qt/backgroundelement.h \
../../Velasquez/Qt/backgroundtool.h \
../../Velasquez/Qt/undocommands.h \
../../Velasquez/Qt/varianthash.h \
../../Velasquez/Qt/vcommon.h

SOURCES += ../../Velasquez/Qt/backgroundelement.cpp \
../../Velasquez/Qt/backgroundtool.cpp \
../../Velasquez/Qt/brushdrawingelement.cpp \
../../Velasquez/Qt/undocommands.cpp \
../../Velasquez/Qt/varianthash.cpp

Этот файл нужно менять только при изменении настроек или при включении/исключении файлов из других папок. Новые файлы из папки MoodBox подключатся автоматически.

4.2 А теперь создаем скрипт make-pro.sh, который как раз и будет генерировать проект XCode

qmake -project -o MoodBox_Mac.pro
cat MoodBox_Mac.pro MacOS.pro > tmp.pro
mv tmp.pro MoodBox_Mac.pro
qmake -spec macx-xcode MoodBox_Mac.pro

4.3 Открываем полученный MoodBox_Mac.xcodeproj в XCode, соглашаемся с выбором папки проекта.

4.4 Заходим в меню XCode: Project — Edit Active Target и устанавливайте следующие параметры:

Architectures = Standard (32-bit Universal)
Base SDK = Mac OS X 10.5
Build active architectures only = disabled

5. Жмём большую кнопку «Build and Go»

Если проект не очень сложный, то программа скомпилируется, слинкуется и будет запущена. А если сложный (есть зависимости с другими библиотеками, есть windows-specific код, активно используются стили .qss), то придется еще поработать — выделять специфичный для платформ код в #ifdef, разделять файл стилей на общие стили и стили, специфичные для платформ, а потом клеить эти файлы при загрузке приложения, собирать сторонние библиотеки с поддержкой universal и многое-многое другое.

А вот Mac-версия Рисоваськиstatic.risovaska.ru/Risovaska_Mac.zip
Присылайте фидбек в комментарии к этому посту или в сообщество Друзья Рисоваськи"
Роман Ворушин @vorushin
карма
88,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (37)

  • +3
    Ураааа! Наконец-то появилась рисоваська и для маков. Уже активно юзаю. Спасибо вам!
    • +3
      Мы старались :)
    • +2
      Очень рад :)
  • +1
    Странно, а почему Xcode, а не QtCreator? Насколько я понял, с ним работать с библиотекой много проще.
    • +2
      QtCreator — он версии 1.0, очень мало функций. Пробовали его и расстроились только. Лучше бы в Qt сделали QtDev плагин к Eclipse и поддерживали бы его по серьезному — тогда и бесплатно, и кроссплатформенно бы было.
      • 0
        Понятно.
        Да, плагин под Эклипс вроде есть — www.qtsoftware.com/developer/eclipse-integration
        Правда, когда я его пробовал, оный работал весьма нестабильно.
      • +1
        QtCreator уже давно версии 1.1. Плюс ко всему, куда уж больше его функционала? Мне вот только не хватает виртуальных папок для дерева файлов проекта, а так — более чем устраивает.
        • 0
          В QtCreator 1.1 есть функция «открыть файл с определением класса, содержащего в имени Foo»?
          • 0
            Ctrl+ЛКМ на имени класса.
            • 0
              Нет, вы не поняли. Я, не имея ни одного открытого исходника, хочу перейти к определению класса MyTimer. Как мне это сделать?
              • 0
                Ctrl+Shift+T в CDT или Alt+Shift+S в Visual Assist, чтобы было понятнее, что я имею в виду.
                • 0
                  Понятнее, к сожалению, не стало :) Я пытался пользоваться Eclipse, но как-то не пошло.
                  Судя по всему, там действительно такого функционала нет. Но, признаюсь, лично мне оно и не особо не нужно. :)
                  Там действительно многих вещей нет, как, например, дерева классов. Но я обычно сразу в диаграмму классов UML добавляю, когда появляется новый, так что с необходимостью тоже можно поспорить.
                  Что ж, видимо, вам QtCreator не подойдет, меня же он вполне устраивает.
  • 0
    Поздравляю!
  • 0
    ура :)
  • 0
    Это значит, что версия для Линукс уже не за горами?
    • 0
      Мы как раз сегодня об этом задумались. Надеюсь скоро будет. если Мак победили, то Линукс уже полегче будет :)
    • 0
      Не знаю как там насчет гор, но уже запускается :)
    • 0
  • +2
    А почему крестик который должен закрывать программу справа а не слева? и почему он сворачивает окно вместо того что бы закрыть его?
  • 0
    А где Linux? Этож куте
    • 0
      Скорее всего скоро будет :) Уже думаем над этим :)
      • 0
        Жду с нетерпением. Потому как под wine рисоваська конечно же работает, но как-то местами.
        • 0
          Хорошие новости: Рисоваська уже компилируется под Ubuntu. Сначала были проблемы со шрифтами, сегодня уже разобрались, но осталось еще много визуальных проблем в клиенте и движок рисования еще сильно глючит.
          Но в целом половину пути уже прошли :)
          • 0
            Отлично! Будем ждать результатов «борьбы»! :)
            • 0
              Ты, кстати, можешь подключаться — пиши в сообщество «Друзья Рисоваськи», у нас куча вопросов по разным дистрибутивам Линуксов и проч. Как минимум тестирование точно нужно будет. «Друзья Рисоваськи» — groups.google.com/group/risovaska2
              • 0
                Подключаюсь. У самого Ubuntu 9.04.
    • 0
      См. habrahabr.ru/blogs/apple/59057/#comment_1602997
      Так точно быстрее соберем пакеты для самых популярных дистрибов
  • 0
    Вы под какой лицензией Qt используете — LGPL?
    • 0
      Win и Mac версии мы писали с использованием коммерческих лицензий, Linux-версию сейчас собираем под Qt LGPL — пока просто как альфа-версию, proof of concept. Хорошо бы всю разработку перевести на LGPL.
      • 0
        Я просто почему спросил — вы в примере используете opensource версию (значит лицензия либо GPL либо LGPL), но раз код рисоваськи закрыт — значит LGPL. Но вот LGPL и статическая линковка у меня никак не связывались :) Теперь всё понятно, спасибо :)
  • 0
    Открытие кода будет? Иначе не нужно, у меня гента.
    • 0
      В ближайшие месяц-два код открывать не будем
  • 0
    отлично! теперь Macintosh пополнился и множеством QT-приложений!
  • 0
    извените за оффтопик, но меня мучает вопрос, можно ли кутишный проект написаный под линукс и венду запустить как-то на макоси без того чтоб его собирать в самой макоси? А то есть большой проект который использует офигенную кучу разных библиотек и собирать все это дело в макоси просто сил уже не хватит.
    • 0
      В общем случае — нельзя.
      • 0
        жалко, но спасибо за быстрый ответ. Значит буду собирать все библиотеки :)
  • 0
    Понимаю, прошел уже почти год, НО вопрос появился сейчас (после прочтения):
    надо ли проделывать всю эту волокиту с установкой или можно скачать qt-creator и qt-library по отдельности и установить их из .DMG?
    Просто я именно так и сделал — у меня редактор то не видит qmake, то половину библиотек (в итоге таблицы летают без окон по экрану).
    Помогите.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.