Начинаем работать с hxcpp (haxe c++) и Visual Studio C++ Express

Как я писал ранее, теперь haxe можно компилировать в c++ программы. Однако в интернете я нашел только один источник, касающийся связки haxe и c++ (http://blog.touchmypixel.com/2009/04/our-possible-haxe-c-plans/). Причем данный материал на английском языке и несколько устарел, т.к. ориентирован на версии haxe 2.03 и hxcpp 0.4. На момент же написания данного поста мы имеем haxe 2.04 (уже со встроенной поддержкой с++) и hxcpp 1.0.5, и взаимодействуют они уже немного по-другому.
Мне пришлось немного понервничать, устанавливая все это добро, поэтому я и решил поделится опытом. Приступаем к установке...
Установка hxcpp и hxcpp
- Качаем и устанавливаем haxe - http://www.haxe.org/download (необходимо скачать автоматический инсталлятор, который установит последние версии haxe и neko).
- Запускаем командную строку (Пуск->Выполнить->"cmd")
- Печатаем в ней "haxelib install hxcpp" (без кавычек, естественно). Это установка последней версии библиотеки hxcpp
- Печатаем "haxelib install neash" - устанавливаем библиотеку neash
- Печатаем "haxelib install nme" (для установки nme).
Установка Microsoft Visual Studio C++ Express (нужна для компиляции)
- Качаем и устанавливаем Microsoft Visual Studio C++ Express с официального сайта http://www.microsoft.com/express/vc/ (Здесь можно скачать как онлайн-установщик, так и образ DVD)
- После завершения установки перезагружаемся. Теперь необходимо создать несколько переменных среды (чтобы все заработало). Для того, чтобы создать переменную среды заходим в "Свойства системы" (Пуск->Панель управления->Система), открывает вкладку "Дополнительно" и нажимаем кнопку "Переменные среды" (вот здесь мы и будем добавлять необходимые пути). Можно добавлять переменные как в группу "Переменные среды пользователя" (верхний список; изменения, внесенные в него, будут работать только у текущего пользователя), так и в "Системные переменные" (нижний список; работает для всех пользователей).
- Добавляем новую переменную переменную (нажимаем кнопку "Создать"): в поле "Имя переменной" пишем "CLPATH" (здесь и далее без кавычек), а в поле "Значение переменной" - "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin" (или аналогичный адрес в зависимости от того, где вы установили Visual Studio), жмем "OK".
- Изменяем переменную "PATH" (для этого выбираем ее в списке и жмем "Изменить"), дописываем в поле "Значение переменной" ";%CLPATH%".
- Открываем Командную строку и печатаем в ней "cl", таким образом мы проверям, правильно ли работает компилятор с++. Скорее всего комп руганется и скажет, что не может найти какие-то DLL.
- Если ошибка возникла, надо запустить батник "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat" (или где вы там поставили Visual Studio). Снова пишем в Командной строке "cl". Если снова возникнет ошибка (у меня возникла), переходим к следующему шагу.
- Добавляем новую переменную среды "Имя переменной" = "IDEPATH", "Значение переменной" = "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE". Снова изменяем переменную "PATH", дописываем в поле "Значение переменной" ";%IDEPATH%"
- Снова пишем в Командной строке "cl". Вы должны получить сообщение о запуске компилятора
- Добавляем новую переменную среды "Имя переменной" = "INCLUDEVC", "Значение переменной" = "C:\Program Files\Microsoft Visual Studio 9.0\VC\include".
- Добавляем новую переменную среды "Имя переменной" = "INCLUDESDK", "Значение переменной" = "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include".
- Добавляем новую переменную среды "Имя переменной" = "INCLUDE", "Значение переменной" = ";%INCLUDEVC%;%INCLUDESDK%".
- Изменяем переменную "PATH", дописываем в поле "Значение переменной" ";%INCLUDEVC%;%INCLUDESDK%"
- Добавляем новую переменную среды "Имя переменной" = "LIBVC", "Значение переменной" = "C:\Program Files\Microsoft Visual Studio 9.0\VC\lib".
- Добавляем новую переменную среды "Имя переменной" = "LIBSDK", "Значение переменной" = "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib".
- Добавляем новую переменную среды "Имя переменной" = "LIB", "Значение переменной" = ";%LIBVC%;%LIBSDK%".

Теперь вы должны быть готовы компилировать под С++. (Лучше, конечно, еще раз, для верности, перезагрузить компьютер, чтобы переменные среды наверняка вступили в силу)

Ну а теперь классический пример "Hello World":

Создаем файл Test.hx и пишем в нем:
class Test {
static function main() {
trace("Hello World !");
}
}
Запускаем командную строку, переходим в папку в папку с файлом Test.hx (команда cd c:\TestFolder - это если ваш файл сохранен на диске C: в папке TestFolder). Печатаем в командной строке "haxe -cpp out -main Test" (без кавычек, опять же).
В этой же папке с исходным файлом должна появиться папка out, а в ней файл Test.exe, запуская этот файл из командной строки получаем сообщение "Main.hx:5: Hello World !"

Поздравляю вы написали первую программу на hxcpp!!!

P.S. В папках устанавливаемых библиотек neash и nme есть вложенные папки samples, обязательно изучите их содержимое:
как исходные тексты примеров, так и скомпилируйте их, запуская файлы "Cpp.hxml". Правда компиляция этих примеров может занять приличное время (у меня, например, один пример компилировался несколько минут, а некоторые после компиляции выдавали ошибки и не запускались).
Р.Р.S. Один или более пунктов описания установки Visual Studio могут быть излишними, так что жду комментариев.

Комментарии

Уже понял.

Уже понял. Нужны были nme.ndll std.dll zlib.dll

HaXe 2.07 hxcpp:

HaXe 2.07
hxcpp: [2.08.0]
neash: [1.0.3]
nme: [3.0.1]

взял nme\3,0,1\samples\03-Bitmaps, скомпилировал, получился exe, запускается и работает. Windows 7 64 bit. Переношу на другую (чистую) машину c Windows XP 32 bit. Запускаю, получаю ошибку
Error : Could not load module std@get_env__1
подкладываю std.dll
получаю ошибку
Error : Null Function Pointer
Более-менее понятно, что ей не хватает чего-то установленного на первой машине и не установленного на второй. вопрос. чего именно. Хочется понять, как сделать инсталлятор.

MinGW32

Может ктонить компилил с MinGW32 и вообще возможно ли такое.

Очень

Очень интересует, буду пытаться, может и выйдет
Вообще у меня бредовая идея прикрутить psp-gcc, мало ли
---
Werdn ЯR

все шло как

все шло как написано, пока не попытался скомпилировать хеллоВорлд. Пишет Build Failed.
точнее:

haxe -cp "D:\work\Flash\proj\TestCpp\src" -cp "D:\Programs\FlashDevelop\Library\HAXE\classes" -main Main -cpp "bin" -debug
haxelib run hxcpp Build.xml haxe -Ddebug -Dcpp -Ddebug -Dhaxe_204 -Dtrue
[file_contents,C:\Program Files (x86)\Motion-Twin\haxe\lib\hxcpp/.current]
Error : Build failed

Компилил с помощью FlashDevelop'a но и через командную строку такая же фигня...
ОС: Венда 7 х64
есть идеи?

hxcpp-проекты во flashdevelop

Здесь http://nanoflexer.blogspot.com/2009/09/1.html написано как компилить hxcpp-проекты во flashdevelop

все беды были

все беды были из-за UAC'a... все работает :))

Можно не

Можно не возиться с этой установкой переменных среды, а вызывать vcvars32 непосредственно перед компиляцией:

@echo off
call "c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
haxe -cpp out -main Test

А как можно

А как можно такую установку к flashdevelop прикрутить?
Если пишу в поле команд Pre-Build Command Line, не помогает.

Создай батник с

Создай батник с данным кодом и укажи его в постбилде, а на первой вкладке отключи компиляцию --- Werdn ЯR

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>.

Подробнее о форматировании

CAPTCHA
Этот вопрос помогает предотвратить автоматический спам
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.
To prevent automated spam submissions leave this field empty.