воскресенье, 6 сентября 2009 г.

Свобода попугаев. Часть 1.

Часть 1.
Рассказ о том, как я впервые компилил haxe-приложения в исполняемый файл(exe).
Дело было под Vista 32 bit.

  1. Сначала я скачал и установил haXe. По ходу установки соглашаемся на установку Neko. [под Windows7 64 bit устанавливаться он не захотел, а вот под Vista-32 встал нормально].

  2. Далее я поставил FlashDevelop

  3. На странице приветствия обнаружил New Project. Выбрал HaXe -> C++ Project. Ввёл имя проекта: MyTestProject. Поставил галку Create directory for project. Получил сгенерённую болванку проекта.

  4. Открывыю src/Main.hx. Вижу там функцию main. Пишу в неё:

    flash.Lib.Init("Test", 800, 600, false, true);
    flash.Lib.SetBackgroundColour(0xffffff);
    var sprite= new Sprite();
    sprite.graphics.beginFill(0x00ff00,1);
    sprite.graphics.drawRect(10,20,30,40);
    sprite.graphics.endFill();
    flash.Lib.current.addChild(sprite);
    flash.Lib.Run();

    При этом в импортах получилось два package:

    import cpp.Lib;
    import flash.display.Sprite;

    Жму F5. Получаю сообщение об ошибке: You can't access the flash package with current compilation flags (for flash.display.Sprite) . Хм. Грубо говоря это означает: "Фигли ты флэшовые пэкэджи используешь в нефэлшовом проекте". Та-ак. Сейчас буду давать адекватный, но ассимметричный ответ на данное заявление.

  5. Подключаю билиботеки neash и nme, которые будут "эмулировать" флэш плеер. Сначала устанавливаю их. Захожу в папку установки haxe (по умолчанию это Program files/Motion-Tween/haxe/) и запускаю оттуда haxelib.exe install nme. Потом haxelib.exe install neash. И в заключение haxelib.exe install hxcpp. Скачались и установились соответствующие библиотеки. Далее подключаю библиотеки к нашему проекту. Для этого захожу в FlashDevelop->Project->Properties->Compiler options. Тыкаю в Libraries и в открывшемся EditBox'е пишу две строки:

    neash
    nme


  6. Теперь торжественно сообщаю компилятору, что он был в корне неправ. В этом же диалоге (FlashDevelop->Project->Properties->Compiler options) в Additional compiler options пишу две строки:

    --remap flash:neash
    --remap neko:cpp


  7. Жму F5 с надеждой скомпилить-таки проект. Снова ошибка. Но в папочке ./bin/src нагенерировалась куча исходников. А что за ошибка? Не найден cl.exe? Ага, т.е. FlashDevelop попытался запустить внешний компилятор (у меня это Microsoft-компилятор от VisualStudio 2008), но так как окружение не настроено - из этого ничего не вышло. Будем настраивать.

  8. Настройка заключается в том, чтобы прописать в переменные окружения все пути для бинарников, инклюдов и библиотек необходимых для компиляции cpp приложения из командной строки. Самый простой вариант устроить это - залезть в файл vsvars32.bat (лежит в Program files/Miscrosoft Visual Studio 8(или 9)/Common7/Tools) и скопировать пути из строчек @set PATH=, @set INCLUDE= и @set LIB= в переменные среды PATH, INCLUDE и LIB соответственно (в Vista я это делал через Панель управдения->Система->Дополнительные параметры системы->Переменные среды)

  9. Вот оно! Вижу зелёный квадратик! Ура! :))



P.S.
Для тех у кого нету установленного VisualStudio, Exey в комментах запостил план Б. За что и выражаю ему благодарность.

8 комментариев:

grigoruk комментирует...

круть, давай дальше, уже очень интересно

Buran комментирует...

буду стараться! думаю к след. выходным накропаю чонить ещё :)

Анонимный комментирует...

Хочу добавить, что если у вас стоит Visual studio Express, то придется докачивать Microsoft Platform SDK и дописывать в INCLUDE
"D:\Program Files\Microsoft Platform SDK\Include;"

Плюс пока как я понял не работает AdvancedAntiAlias для шрифтов и BitmapData.draw() метод.

Поправьте если ошибся.

Forwolk

Buran комментирует...

Скорее всего вы правы, хотя по поводу BitmapData.draw это было бы огорчительно. Попробую в ближайшее вермя проверить. Спасибо за информацию!

Exey комментирует...

Windows XP SP2, AMD проц, Microsoft Visual Studio не стояло:

1. Сделал все по вышеизложенной инструкции (до пункта про Visual Studio), нажал компиляцию, ФлэшДевелоп ругнулся:
"haxelib" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

2. Перезагрузил комп(Винда обновила переменную среды %PATH%), теперь выругался:
"cl.exe" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

3. Скачал 75MiB Microsoft Visual Studio C++ Express http://www.microsoft.com/express/vc/ и установил
3.1 Дописал(иммено ДОПИСАЛ, т.к. в %PATH% важно не затереть ;%HAXEPATH%;%NEKO_INSTPATH% иначе опять будет ругаться, что нет "haxelib") переменные из vsvars32.bat
Сгенерился Build.xml и куча файлов, но опять ошибка:
C:\Program Files\Motion-Twin\haxe\lib\hxcpp\1,0,7//runtime/src/hxObject.cpp(12) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
Called from <null> line 1 <...>"

4. Качаю 420MiB Platform SDK http://www.microsoft.com/downloads/details.aspx?FamilyID=e15438ac-60be-41bd-aa14-7f1e0f19ca0d&DisplayLang=en
4.1 Монтирую образ(рекомендую для этого WinCDEmu Mounter), виндовый инсталятор зависает на определении места :(, иду в папку Setup на смонтированом диске запускаю инсталятор "msiexec /package PSDK-x86.msi /qr"
Дописываю в %INCLUDE% C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\
а в %LIB% C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib\
перегружаюсь
Ура!!! Скомпилилось, вижу маленький зеленый прямоугольничек!

nail84 комментирует...

[под Windows7 64 bit устанавливаться он не захотел, а вот под Vista-32 встал нормально]
Если запускать сетап с режимом совместимости, то запускается и под 64 битную 7ку.

Zaphod комментирует...
Этот комментарий был удален автором.
Werdn комментирует...

Меня интересует а можно ли использовать mingw вместо компилятора негрософта?
Ведь как оно происходит — под линухом компилит на GCC, везде использует SDL для графики, так что странное решение было у создателей HXCPP.
Вполне возможно, что очень даже можно, только как?