Pull to refresh

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

Reading time 4 min
Views 20K
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
Присылайте фидбек в комментарии к этому посту или в сообщество Друзья Рисоваськи"
Tags:
Hubs:
+35
Comments 37
Comments Comments 37

Articles