Skip to content

Как собрать avalon под MacOS X

Anton Batenev edited this page Feb 12, 2014 · 5 revisions

Данное описание могло сильно устареть. Пожалуйста, если вы собрали avalon под MacOS, обновите описание на актуальное.

Итак, вы решили собрать avalon под МакОСью? Вам и тапки в руки :)

Существует два способа собрать avalon - простой и сложный. Если повезет, то удастся собрать простым путем. Если нет, то - сложным (дополнительно был описан очень простой путь).

что нам нужно?

sudo port install git

Вообще, советую иметь у себя в системе MacPorts, потому что вщь сильно полезная и, возможно, понадобится нам в сложном способе сборки Авалона.

  • Qt — можно скачать только framework (см. следующий пункт);
  • XCode/QtCreator (по идее опционально, но есть свои тонкости):
    • XCode (нужна бесплатная регистрация для скачивания);
    • QtCreator.

путь легкий

Путь легкий А выглядит так:

  • Качаем авалон (git clone git://github.com/rsdn/avalon.git);
  • выполняем qmake;
  • выполняем qmake -project;
  • запускаем avalon.xcodeproj в XCode;
  • запускаем сборку.

voilá

Путь легкий B выглядит так:

  • Качаем авалон (git clone git://github.com/rsdn/avalon.git);
  • выполняем qmake;
  • запускаем avalon.pro в QtCreator;
  • запускаем сборку.

Путь легкий C выглядит так:

Путь легкий D выглядит так:

  • Качаем авалон (git clone git://github.com/rsdn/avalon.git);
  • выполняем
cmake -G "XCode"
  • Открываем Avalon.xcodeproj в XCode;
  • в свойствах таргетов ALL_BUILD и avalon убираем опции компилятора std=c++0x
  • запускаем сборку.

voilá

Естественно, надо будет еще настроить базу данных (с помощью sql-файлов для MySQL или SQLite, расположеных в папке src/sql).

Зачем нжно запускать именно в IDE? Просто потому что я не смог вручную заставить qmake генерировать Makefile'ы. Несмотря на опцию -makefile он упорно продолжал генерировать проект для XCode.

Если интересует именно Makefile, то достаточно щелкнуть правой кнопкой по avalon.xcodeproj и выбрать опцию Show package contents. Он там.

путь сложный

После обновления Qt до Qt 4.5 в моем случае qmake перестал генерировать необходимые зависимости стал неправильно генерировать Makefile.

Общий путь такой же, как в лекгом случае. И даже имеет смысл запустить сборку один раз (в этом случае вылезет много ошибок, но будет сгенерирован — пусть и неправильный, но Makefile).

QtCreator поместит Makefile в корневую директорию проекта (в папку avalon), а XCode — внутрь пакета avalon.xcodeproj.

Внимательно изучите ошибки, выдаваемые компилятором. В моем случае он не смог найти подключаемые файлы QHttp, QSql*, QWebView в файле sysheaders.h.

Не стоит расстраиваться. Как минимум в версии 4.5 Qt стал еще более модульным, чем предшественники, и каждый из его модулей теперь — это отдельный фреймворк, находящийся в папке /Library/Frameworks.

Достаточно просто модифицировать Makefile так, чтобы компилятор смог все увидеть. Вот необходимые строчки:

INCPATH       = -I/usr/local/Qt4.5/mkspecs/macx-g++ -I. -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore  
I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/usr/include -I. -I. -Imodel -Istorage -I. -I. -F/Library/Frameworks

LFLAGS        = -headerpad_max_install_names -F/Library/Frameworks/QtNetwork.framework -F/Library/Frameworks/QtWebKit.framework 
-F/Library/Frameworks/QtSql.framework
LIBS          = $(SUBLIBS) -F/Library/Frameworks -L/Library/Frameworks -framework QtSql -framework QtWebKit 
-framework phonon -framework QtDBus -framework QtXml -framework QtNetwork -framework SystemConfiguration 
-framework QtGui -framework Carbon -framework AppKit -framework QtCore -lz -lm -framework ApplicationServices

В INCPATH надо добавить пути к QtNetwork.framework, QtSql.framework, QtWebKit.framework и любому другом фреймворку по типу, как подключен QtCore. То же самое для LFLAGS и LIBS. Теперь достаточно запустить сборку, и вс соберется, как надо.

Внимание! Строки этих опций не должны содержать перевода строк!

особое внимание к MySQL

После обновления Qt он "потерял" плагин к MySQL. Для ручной сборки этого плагина нужно:

Переходим в папку src/plugins/sqldrivers/mysql в папку с исходниками Qt:

cd $QTDIR/src/plugins/sqldrivers/mysql
qmake -o Makefile "INCLUDEPATH+=/usr/local/include" "LIBS+=-L/usr/local/lib -lmysqlclient_r" mysql.pro
make
sudo make install

Надо будет исправить путь в переменной LIBS на то, где находится lmysqlclient_r.* (в моем случае — это /usr/local/lib/mysql).

Если этого будет недостаточно или такого файла не окажется, качаем исходники MySQL, в папке с исходниками выпоняем:

./configure --without-server
make && sudo make install

После чего собираем плагин.