Компиляция как сделать


Лучшие новости сайта

Компиляция как сделать

Компиляция как сделать

Компиляция как сделать

Наверное, многие разработчики сталкивались с проблемой выбора или создания окружения для программирования. На мой взгляд, бесплатное окружение на основе порта компилятора gcc (MinGW) и какая-нибудь IDE, совместимая с ним — наиболее приемлемый выбор.
В этой статье я рассмотрю установку компилятора, его интеграцию с интегрированной средой разработки, его настройку, установку и компиляцию сторонних библиотек. Рассмотрю некоторые полезные утилиты для облегчения сборки исходного кода и системы контроля версий файлов.
Статья со временем будет обновляться и дополняться.


MinGW/MSYS и QtCreator

Данный мануал создавался с целью быть пособием и заметкой для разработчиков, помочь им собрать и настроить собственное окружение для разработки нативных приложений в семействе OS Windows.

Содержание:






































1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО

Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.

MinGW — сокращение от «Minimalist GNU for Windows», по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.
MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.
MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует . В первую очередь MinGW предназначен для использования разработчиками, которые привыкли работать с компилятором gcc.
MinGW включает в себя:

  • Порт GNU Compiler Collection (GCC), который включает в себя компиляторы таких языков, как: C, C++, ADA и Fortran.
  • Порт GNU Binutils для Windows (as, ld, ar)
  • Консольный установщик (mingw-get) для MinGW и MSYS
  • Графический установщик (mingw-get-inst)

MSYS — сокращение от «Minimal SYStem», это порт командной оболочки Bourne Shell (sh) для Windows. Он предлагается в качестве альтернативы «cmd.exe» от Microsoft’а. Оболочка хорошо подходит для портирования существующих приложений и библиотек, которые есть в nix системах и включает в себя небольшой выбор портов инструментов Unix, облегчающих задачу портирования.

Комбинация MinGW и MSYS предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.
Полезные ссылки:

1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение

1.1.1. Скачиваем официальный онлайн-установщик MinGW, на данный момент последняя версия установщика 20120426:
Запускаем установщик, нажимаем «Next», «Next», выбираем «Use pre-packaged repository catalogues»:


Установка тулчейна MinGW/MSYS

Жмем «Next» и соглашаемся с лицензией, снова «Next», и теперь выбираем путь для установки:


Установка тулчейна MinGW/MSYS

Рекомендуется выбирать путь без пробелов, лучше всего устанавливать MinGW в корень диска, т.е в «C:\MinGW». Я выбрал «C:\Qt\MinGW», так удобнее будет подключить MinGW к IDE QtCreator. Если вы планируете дальше интегрировать свой тулчейн в какую-нибуть IDE, сделайте аналогично и нажмите «Next». Необходимость наличия группы ярлыков в меню «Пуск» — по вашему желанию. Но можно не создавать (отметив галочкой «Don’t create a Start Menu folder) и нажать «Next».

Выбираем следующие пакеты:

  • C Compiler
  • C++ Compiler
  • MSYS Basic System
  • MinGW Developer ToolKit

и жмем «Next»


Установка тулчейна MinGW/MSYS

затем подтверждаем установку выбранных пакетов кнопкой «Install».
Откроется консольное окно, в котором будет отображаться процесс скачивания и установки пакетов. Проследите, чтобы процесс выполнялся без ошибок (например, если будут недоступны сервера репозитория, необходимо повторить попытку установки с этими же параметрами позже) и дождитесь завершения процесса.
Теперь необходимо добавить в переменную окружения PATH путь до директории «C:\Qt\MinGW\bin». Делается это следующим образом (для Win7, для остальных систем по аналогии):
1.1.1.1. Нажмите правой клавишей мышки на ярлык «Компьютер» и кликните на пункт меню «Свойства».
1.1.1.2. Кликните слева на пункт «Дополнительные параметры системы», в появившемся окне нажмите кнопку «Переменные среды».
1.1.1.3. В верхнем списке переменных найдите переменную «Path», кликните на нее два раза для редактирования.
1.1.1.4. Добавьте путь до директории «\bin». В моем случае это будет «C:\Qt\MinGW\bin», разделение путей выполняется символом «;».


Переменная PATH

1.1.1.5. Подробнее можно прочесть .
Все, тулчейн MinGW и его оболочка MSYS установлены. Теперь можно перейти к установке дополнительных программ, которые помогут облегчить нам жизнь.

1.1.2. Установка дополнительных пакетов и полезные команды и утилиты.
Сразу после установки MinGW и MSYS будет полезно установить некоторые пакеты.
Для этого запускаем файл «C:\Qt\MinGW\msys.0\msys.bat», для которого, кстати, полезно будет создать ярлык, и набираем там такие команды (переход на новую строку аналогичен нажатию клавиши «Enter»):

Команда «mingw-get install» аналогична популярной на разных Linux-дистрибутивах, наверное, знакомой многим, команде «apt-get install». Обе эти команды скачают и установят вам нужный пакет из репозиториев.
Список доступных пакетов для установки можно посмотреть по команде «mingw-get show», для лучшего восприятия его можно отсортировать следующим образом:

Удалить установленный пакет можно командой «mingw-get remove выбранный_вами_пакет»
Обновить пакет можно командой «mingw-get upgrade выбранный_вами_пакет», команда «mingw-get upgrade» обновит все пакеты вашего тулчейна полностью.
На этом базовая настройка тулчейна закончена, можно приступить к сборке/переносу проектов или более тонкой настройке.
1.1.3. Какие утилиты будет полезно использовать вместе с MinGW?
Для редактирования исходников и других файлов можно использовать консольный редактор «vim», который идет в комплекте с MinGW’ом.
Но если вы привыкли к оконному интерфейсу, воспользуйтесь отличнейшим редактором — .
Для распаковки содержимого архивов можно использовать консольные команды или архиваторы с GUI, такие как WinRar, например.
Лично я рекомендую использовать .
1.1.4. Что можно почитать?
Список литературы можно найти здесь:



1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat

Возможно многим разработчикам стандартный шел, вызываемый по «msys.bat» покажется унылым и скучным:


Стандартное окно MSYS тулчейна MinGW

Еще бы, работать в такой консоли достаточно неудобно, хотя бы из-за отсутствия нормального копипаста.
Но к счастью, есть такой проект как от ‘а, являющийся продвинутым форком ConEmu by Zoin.
ConEmu — это очень удобный и симпатичный терминал, поддерживающий вкладки. Его подробнейшее описание, написанное самим автором этой программы, можно прочитать . Самым главным преимуществом для меня является нормальный копипаст. Здесь он реализован просто замечательно, с помощью левой кнопки мышки или сочетания «Alt + Левая кнопка мышки» можно выделить блок или строку в консоли соответственно. После выделения строка сразу автоматом скопируется в буфер. Сочетание клавиш «Ctrl + V» или клик левой клавишей мышки вставляет первую строку из буфера, а «Shift + Insert + Enter» вставляет сразу все строки.
Для связки ConEmu и MinGW, нам необходимо скачать специально подготовленные . Установка весьма проста и тривиальна — нужно лишь распаковать «-mingw32» и «-mingw64» пакеты в корневую папку компилятора (в моем случае это «C:\Qt\MinGW»).
Если вы не хотите настраивать консоль, можете скачать уже настроенную мной:

Выглядит она следующим образом (изображение кликабельно):


Стандартное окно sh в MinGW

И устанавливается абсолютно аналогично.
На мой взгляд панелька в стиле терминала Quake, выезжающая сверху экрана по нажатию «Ctrl + », не только эффектно выглядит, но и очень удобна в использовании.
При желании, конечно, можно все очень и очень гибко настраивать под себя, программа ConEmu имеет множество настроек и совместима со всеми последними OS семейства Windows.

1.3. Компиляция и установка утилиты pkg-config

Официальный сайт pkg-config:
pkg-config это утилита, которая предоставляет общий интерфейс для получения информации об установленных в системе программных библиотеках с целью компиляции программ из исходного кода.
В нашем случае она нужна для компиляции некоторых библиотек и проектов.
1.3.1. Скачиваем последнюю версию исходников pkg-config’а, на момент написания статьи это 0.28:
1.3.2. Распаковываем архив в папку «C:\Qt\build», исходники pkg-config’а должны быть в папке «C:\Qt\build\pkg-config-0.28».
1.3.3. Компилируем pkg-config и библиотеку GNU C Library (glibc), идущую в комплекте:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:
Кстати, небольшой, но полезный совет! Если у вас многоядерный процессор, то при вызове утилиты make можно воспользоваться ключом «-jX», где X – число одновременно выполняемых потоков компиляции, которое зависит от количества ядер процессора n. Обычно рекомендуется брать X = n + 1, но если процессор поддерживает технологию Hyper-threading, то число потоков следует брать X = 2 · N + 1. То есть команды компиляции для двухъядерного процессора будут следующими: «make -j3» и «make -j3 install». Благодаря распараллеливанию компиляции время сборки крупных проектов значительно сокращается.

Утилита и библиотека скомпилировались и установились.
1.3.4. Чтобы обойти ошибку в MSYS, следует выполнить в консоли блок таких команд:

Это создаст файл «pkg-config.sh» в папке «C:\Qt\MinGW\bin»
1.3.5. Теперь нужно сделать скрипт исполнительным и добавить переменную в альтернативное окружение:

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

1.4. Установка CMake, примеры использования

Официальный сайт CMake:
CMake (cross platform make) — это кроссплатформенная система автоматизации генерации файлов для сборки программного обеспечения из исходного кода.
CMake не занимается непосредственно сборкой исходных кодов, он лишь генерирует файлы для управления сборкой проекта из файлов «CMakeLists.txt». Это могут быть:

  • Обычные Makefile, которые используются в системах Unix для сборки с помощью утилиты make;
  • Файлы projects/workspaces (.dsp/.dsw) в системах Windows для сборки с помощью Microsoft Visual C++;
  • Проекты XCode в Mac OS X.

1.4.1 Установка CMake:
1.4.1.1. Скачиваем установочный пакет CMake с официального сайта (последняя версия на момент написания статьи — 2.8.10.2):
1.4.1.2. Сохраняем установочный пакет в любое удобное для вас место и запускаем «cmake-2.8.10.2-win32-x86.exe».
1.4.1.3. Щелкаем «Далее», соглашаемся с лицензией, выбираем пункт «Add CMake to the system PATH for all users»


Установка CMake

Эта опция установит в переменную окружения PATH ту папку, в которой будет установлен CMake.
Ярлык создаем по желанию, щелкаем «Далее».
1.4.1.4. Выбираем папку, в которую будет установлен CMake. Я рекомендую выбрать папку «C:\Qt\CMake», так как потом можно будет легко интегрировать его со средой разработки (IDE). Щелкаем «Далее».


Установка CMake

1.4.1.5. При желании можно создать группу ярлыков в меню «Пуск». Щелкаем «Установить», ждем окончания установки и нажимаем «Готово». Всё! CMake установлен.

1.4.2 Примеры использования CMake:
1.4.2.1. Немного основ, общие советы.
Для сборки проекта с помощью CMake в корневой директории проекта создается файл «CMakeLists.txt», описывающий этот проект и его зависимости. Примеры компилирования библиотек с помощью утилиты CMake можно найти здесь:


1.4.2.2. Пример моего «CMakeLists.txt» для сборки примера «oldglutdemo.c» из пункта , с использованием библиотеки GLUT:

Текст выше нужно выделить и сохранить в файл с именем «CMakeLists.txt», затем файл «oldglutdemo.c» и «CMakeLists.txt» нужно поместить в отдельную папку, например «C:\Qt\build\GLUT\glut-3.7.6\cmake-test».
Далее набираем в консольном окне такие команды:

И в итоге получаем исполнительный файл «GLUT-Req.exe». Обратите внимание на:

Без установки этих переменных CMake не видит библиотеку GLUT.
1.4.2.3. Переменные:

Из названий переменных все должно быть понятно:

Каталог с исходниками можно оставить в чистом состоянии. Для этого следует перейти в сборочный каталог (в данном случае «build_project») и разверенуть в него дерево исходного кода с последующей генерацией Makefile’ов. Пример:

В аргумент «build» необходимо прописать путь до каталога с исходным кодом, который нужно оставить чистым. После выполнения команды в каталоге «build_project/» создастся полная копия дерева проекта и в этом каталоге можно будет выполнять дальнейшую сборку.

1.4.2.4. Кросскомпиляция с помощью CMake.
В папке с проектом создаем файл с расширением «.cmake», например, «Toolchain-eldk-ppc74xx.cmake», с подобным содержимым:

И конфигурируем проект:

Если переменная «CMAKE_FIND_ROOT_PATH_MODE_PROGRAM» установлена в NEVER, то будут использоваться инструменты из недр вашей системы. Если она установлена в ONLY, то будут использованы инструменты из каталога «CMAKE_FIND_ROOT_PATH/bin». В этом случае следует быть осторожным, так как из поля видимости CMake пропадают некоторые кросс-утилиты из состава binutils, например tuple-ar и tuple-ranlib. Решить эту поблему можно с помощью создания симлинков на эти инструменты. Симлинки следует расположить в директорию «CMAKE_FIND_ROOT_PATH/bin». В противном случае, при сборке проекта может возникать следующая ошибка:

Error running link command: No such file or directory

Подробнее можно прочесть тут:

1.4.3 Что почитать про CMake? (литература):
Из наиболее полезного:

1.5. Установка Subversion (svn)

Официальный сайт svn:
Subversion или svn, это свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.

1.5.1. Установка svn из бинарного пакета:
1.5.1.1. Для того чтобы получить бинарный пакет svn, необходимо пройти процедуру регистрации на сайте
1.5.1.2. После регистрации переходим на страницу загрузки и загружаем последнюю версию «Subversion command-line binaries», под версию своей операционной системы. На момент написания статьи последняя версия 1.7.8.
1.5.1.3. Установка предельно проста. Запускаем установщик, и выбираем установочный путь, например, «C:\Qt\SVN», затем жмем «Next» и Subversion установлен.
1.5.1.4. Проверить его работу можно набрав в консоли svn. После запуска должна появится строка «Type ‘svn help’ for usage.»

1.5.2. Список полезных команд, советов:
Помимо CollabNetSubversion существует еще одна версия клиента Subversion под Windows с более глубокой интеграцией в проводник, это .
Команды:

1.6. Компиляция и установка git

Официальный сайт git:
git — это распределённая система управления версиями файлов. Проект git был создан Линусом Торвальдсом, чтобы облегчить процесс управления разработкой ядра Linux, первая версия git’a выпущена 7 апреля 2005 года.
На сегодняшний день множество проектов используют git, наиболее крупные и значимые: ядро Linux, Android, MediaWiki.

1.6.1. Компиляция git:
Внимание! Компиляция возможна, на выходе получаются рабочие бинарники, однако имеют место быть несколько неприятных багов.
Во-первых, git не может распознать адреса репозиториев, начинающихся на http или https, однако доступ по ssh работает отлично.
Во-вторых во время компиляции git раздувается до невероятных размеров (700 MB), по идее размер можно намного урезать, если подлинковать динамические библиотеки, а не статические.
Настоятельно рекомендую воспользоваться официальным !
Если вы всё-таки захотели попробовать скомпилировать git, необходимо для начала скомпилировать и установить все его зависимости:
Зависимости:



1.6.1.1. Скачиваем стабильную версию исходников git с официального сайта (на данный момент последняя версия 1.8.1): .
1.6.1.2. Распаковываем архив в папку «C:\Qt\build», исходники git’a должны быть в папке «C:\Qt\build\git-1.8.1».
1.6.1.3. Открываем файл «C:\Qt\build\git-1.8.1\Makefile» и изменяем строку #2455 на:

После изменения сохраняем файл.
1.6.1.4. Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или удобный ConEmu, установку которого я расписал выше, и набираем в консольном окне такие команды:

1.6.1.5. git будет скомпилирован и установлен в MinGW окружениие.

1.6.2. Установка git из бинарного пакета:
1.6.2.1. Скачиваем стабильную версию установщика git с официального сайта (на данный момент последняя версия 1.8.0): , git полностью совместим с окружением MinGW.
1.6.2.2. Запускаем установщик и следуем указанным инструкциям. После установки git занимает приблизительно 220 MB. Я устанавливал git в папку «C:\Qt\Git» со следующими параметрами (увеличить изображение можно по клику):


Установка git windows

1.6.2.3. Git готов к работе! Если у вас была запущена консоль, перезапустите её и удостоверьтесь, что git прописался в PATH и отлично вызывается командой «git».

1.6.3. Полезные команды и советы, создаем наш первый репозиторий на :
1.6.3.1. Регистрируемся на (Sign up) и подтверждаем свой электронный ящик.
1.6.3.2. Создаем новый репозиторий: , заполняем как вам удобно все поля. После заполнения нажимаем кнопку «Create Repository».
1.6.3.3. Теперь на локальном компьютере нужно создать файл ключа и записать его в профиль на гитхабе. Для этого выполняем в терминале следующее:

Сгенерированный ключ скопируется в буфер обмена после выполнения последней команды.
1.6.3.4. Теперь нам нужно просто зайти на гитхабе в , нажать «Add Key», скопировать ключ в большое поле и подтвердить действие.
1.6.3.5. Следующий шаг — создание локального репозитория на своём компьютере. Создадим для этого дела папку «C:\Qt\Repo». И введем в терминал такие команды:

При выполнении этих команд у вас спросят имя и пароль, которые вы вводили при регистрации. В случае, если вы заходите по ssh (:ВашеИмя/Test.git), вам будет предложено ввести фразу-пароль. После выполнения команд в репозиторий на гитхабе добавится файл «README.md».

1.6.3.6. Описание команд git’a.

1.6.3.7. Что можно почитать про git?

2. Компиляция и установка библиотек в тулчейн MinGW

Для сборки и создания различных проектов вам возможно потребуются различные библиотеки. В этом разделе описана компиляция и установка наиболее популярных и используемых библиотек. Установка большинства либ сводится к простому копированию заголовочных файлов, статических и динамических библиотек в соответствующие корневые директории тулчейна MinGW. Файлы с расширением «.dll» — это динамические библиотеки, они копируются в директорию «C:\MinGW\bin», файлы с расширением «.lib» или «.a» — статические библиотеки, содержащие запакованные объектные модули, их место в «C:\MinGW\lib». Заголовочные файлы с расширениями «.h», «.hxx» или «.hpp» должны располагаться в «C:\MinGW\include».
Если вы устанавливаете уже скомпилированную библиотеку, проверьте, возможно ли её использовать с объектными модулями, которые генерирует компилятор MinGW.

2.1. Компиляция и установка библиотеки FreeGLUT

Описание:
Официальный сайт:
FreeGLUT — это свободная и открытая реализация библиотеки OpenGL Utility Toolkit (GLUT), библиотека FreeGLUT предоставляет пользователю функции создания и управления окнами, которые содержат OpenGL-контекст на различных платформах, кроме того, библиотека позволяет отслеживать события клавиатуры, мышки и джойстика. Желательно использовать именно библиотеку FreeGLUT, вместо старого GLUT’а, так как библиотека работает значительно стабильнее на относительно новых операционных системах (Windows Vista, 7, 8) и поддерживает OpenGL версии 3.1.
FreeGLUT выпущен под лицензией .

Сборка:
2.1.1. Скачиваем последнюю версию исходников библиотеки FreeGLUT, на момент написания статьи это 2.8.0:
2.1.2. Распаковываем архив в папку «C:\Qt\build\GLUT», исходники библиотеки должны быть в папке «C:\Qt\build\GLUT\freeglut-2.8.0».
2.1.3. Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или удобный ConEmu, установку которого я расписал выше, и набираем в консольном окне такие команды:

2.1.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки.
Динамическая «libglut-0.dll» в «C:\Qt\MinGW\bin»
Статические «libglut.a» и «libglut.dll.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\GL»
2.1.5. Компиляция и запуск демо-кода:
2.1.5.1. Создаем файл «glutdemo.c» в папке «C:\Qt\build\GLUT», вставляем в него такое содержимое:

и сохраняем.
2.1.5.2. Для компиляции кода запускаем «C:\Qt\MinGW\msys.0\msys.bat» и набираем в консольном окне такие команды:

Данные команды скомпилируют код в исполнительный файл «glutdemo.exe», при запуске которого создастся окно, полностью закрашенное в красный цвет:


Работа библиотеки FreeGLUT, скомпилированной MinGW'ом

Параметр -mwindows нужен для того, чтобы приложение запускалось без консольного окна, если вам нужно консольное окно, компилируйте без этого параметра или с параметром -mconsole.
Следует отметить, что для запуска «glutdemo.exe» необходимо добавить в переменную окружения PATH путь «C:\Qt\MinGW\bin», подробнее смотрите пункт

2.2. Компиляция и установка библиотеки GLUT

Описание:
Официальный сайт порта для Win32:
GLUT (OpenGL Utility Toolkit) это библиотека утилит для приложений под OpenGL, которая в основном отвечает за системный уровень операций ввода-вывода при работе с операционной системой. С помощью GLUT’а можно легко создать окно и управлять им. Кроме того библиотека позволяет: рисовать ряд простейших геометрических примитивов, отслеживать события клавиатуры и мыши, создавать несложные всплывающие меню и т. д. GLUT позволяет облегчить изучение OpenGL, так как для его использования не требуется знать API управления окнами. Библиотека GLUT была написана Mark’ом Kilgard’ом, а затем портирована на Windows Nate’ом Robins’ом.
Следует отметить, что порт библиотеки GLUT не обновлялся с 2001-го года, ее реализация работает достаточно нестабильно в современных операционных системах, поэтому ее рекомендуется заменять более новой библиотекой .

Сборка:
2.2.1. Скачиваем последнюю версию исходников библиотеки GLUT, на момент написания статьи это 3.7.6:
2.2.2. Распаковываем архив в папку «C:\Qt\build\GLUT», исходники библиотеки должны быть в папке «C:\Qt\build\GLUT\glut-3.7.6».
2.2.3. Открываем файл «C:\Qt\build\GLUT\glut-3.7.6\include\GL\glut.h» и добавляем после #if defined(_WIN32) (в строку #12) такие строки:

затем сохраняем файл.
2.2.4. Открываем файл «C:\Qt\build\GLUT\glut-3.7.6\lib\glut\win32_winproc.c» и комментируем строчку #21:

2.2.5. Открываем файл «C:\Qt\build\GLUT\glut-3.7.6\lib\glut\win32_util.c» и редактируем функцию int gettimeofday(struct timeval tp, void tzp) следующим образом:
Смотрим условие if (QueryPerformanceCounter(&t)) (строка #35) и заменяем его тело на:

Это нам даст нормальную работу функции glutTimerFunc() в системах Windows Vista, 7 и 8.
2.2.6. Скачиваем , созданный мной специально для сборки библиотеки GLUT, и переносим его в папку «C:\Qt\build\GLUT\glut-3.7.6».
2.2.7. Компилируем и устанавливаем библиотеку:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» и набираем в консольном окне такие команды:

2.2.8. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая «glut32.dll» в «C:\Qt\MinGW\bin»
Статическая «libglut32.a» в «C:\Qt\MinGW\lib»
Хэдер «glut.h» в «C:\Qt\MinGW\include\GL»
Архив исходников , если вам лень самим добавлять изменения, нужно просто распаковать этот архив в папку «C:\Qt\build\GLUT», и выполнить действия пункта 2.2.7. В архиве уже применены фиксы, описанные в пунктах выше.
2.2.9. Компиляция и запуск демо-кода.
2.2.9.1. Создаем файл «oldglutdemo.c» в папке «C:\Qt\build\GLUT», вставляем в него такое содержимое:

и сохраняем.
2.2.9.2. Для компиляции и запуска кода запускаем «C:\Qt\MinGW\msys.0\msys.bat» и набираем в консольном окне такие команды:

Приложение «oldglutdemo.exe» создаст окно с красным квадратом по центру:


Работа библиотеки GLUT, скомпилированной MinGW'ом

2.3. Компиляция и установка библиотек SDL-окружения

По своей структуре библиотека SDL не является полноценным SDK (Software Development Kit) для разработчиков игр, так как не включает в себя высокоуровневые функции для работы с графикой, звуком и внешними устройствами. Но благодаря тому, что она предоставляет прямой доступ к графической системе, звуковой карте, устройствам ввода (клавиатуре, мыши, джойстику), CD-ROM’ому, таймеру и в ней реализованы некоторые низкоуровневые функции для работы с графикой и звуком, библиотеку вполне можно использовать для разработки не слишком сложных приложений или портирования существующих, где SDL библиотека будет использоваться как блиттер. В библиотеке реализован только минимум необходимых функций, она не раздута на десятки мегабайт и достаточно быстра. По своей сути SDL является каркасом для других библиотек, которые поддерживают более сложные функции в какой-то одной области (графика, микширование звука, поддержка различных форматов файлов, GUI и. т. д). И уже вместе с этими дополнительными библиотеками SDL и образует достаточно многофункциональный, хоть и уже устаревший, SDK для разработчиков игр.
В этом разделе я рассмотрю сборку частоиспользуемых библиотек SDL. Некоторые из них поддерживаются официально, некоторые поддерживаются сторонними разработчиками. Собраное SDL-окружение для MinGW позволит вам легко перенести множество игр на платформу Windows.

2.3.1. Компиляция и установка основной библиотеки SDL

Описание:
Официальный сайт:
Библиотека Simple DirectMedia Layer (SDL) реализует единый программный интерфейс к графической подсистеме, звуковым устройствам и средствам ввода для широкого спектра платформ. Она активно используется при написании мультимедийных программ: игр, эмуляторов или плееров, и является этаким подобием «DirectX» для огромного количества платформ. Более подробно про эту библиотеку можно прочитать здесь: .

Сборка:
2.3.1.1. Скачиваем последнюю версию исходников библиотеки SDL с официального сайта, на момент написания статьи это 1.2.15:
2.3.1.2. Распаковываем архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL-1.2.15».
2.3.1.3. Компилируем и устанавливаем SDL-библиотеку:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

Например, опция «—enable-stdio-redirect=no» отключает файлы «stdout.txt» и «stderr.txt», которые создаются при запуске программы, и направляет вывод в консольное окно.
2.3.1.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая «SDL.dll» в «C:\Qt\MinGW\bin»
Статические «libSDL.a», «libSDL.dll.a» и «libSDLmain.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\SDL»
2.3.1.5. Запуск и компиляция небольшого демо-кода:
Создаем файл «sdldemo.c» в папке «C:\Qt\build\SDL» с таким содержимым:

и сохраняем.
Для компиляции и запуска кода запускаем «C:\Qt\MinGW\msys.0\msys.bat» и набираем в консольном окне такие команды:

Приложение «sdldemo.exe» создаст простое и небольшое окно с оранжевым треугольником в центре:


Работа библиотеки SDL, скомпилированной MinGW'ом

2.3.2. Компиляция и установка библиотеки SDL_image

Описание:
Официальный сайт:
Библиотека SDL_image является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях различные форматы изображений, не ограничиваясь форматом «.bmp». SDL_image позволяет программистам легко использовать несколько форматов без необходимости написания функций загрузки и преобразования.

Сборка:
Внимание! Зависимости:



(Опционально. Я не использовал, так как ничтожно малое количество проектов использует формат изображений «.tiff»).
Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.3.2.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_image, на момент написания статьи последняя версия 1.2.12:
2.3.2.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL_image-1.2.12».
2.3.2.3. Компилируем и устанавливаем библиотеку SDL_image:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.2.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «SDL_image.dll» в «C:\Qt\MinGW\bin»
Статическая «libSDL_image.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\SDL»
2.3.2.5. На этом установка завершена. При желании можно скомпилировать утилиту «showimage.exe»:

Если на «showimage.exe» перетащить любое изображение — оно откроется в окне.

2.3.3. Компиляция и установка библиотеки SDL_net

Описание:
Официальный сайт:
Сетевая библиотека SDL_net является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях сеть. SDL_net позволяет программистам легко обработавать сетевые соединения и передачу данных. Код, написанный с использованием функций из этой библиотеки, будет кроссплатформенным.

Сборка:
2.3.3.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_net, на момент написания статьи последняя версия 1.2.8:
2.3.3.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL_net-1.2.8».
2.3.3.3. Компилируем и устанавливаем библиотеку SDL_net:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.3.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «SDL_net.dll» в «C:\Qt\MinGW\bin»
Статическая «libSDL_net.a» в «C:\Qt\MinGW\lib»
Хэдер «SDL_net.h» в «C:\Qt\MinGW\include\SDL»

2.3.4. Компиляция и установка библиотеки SDL_gfx

Описание:
Официальный сайт:
Библиотека SDL_gfx содержит в себе функции рисования примитивов и работы над изображениями-спрайтами (масштабирование, повороты, фильтры и т.д). Она развились из проекта SDL_gfxPrimitives, который представлял основные процедуры рисования примитивов, таких как: линии, окружности и многоугольники. Библиотека не относится к официальным, но большое количество проектов ее используют.

Сборка:
2.3.4.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_gfx, на момент написания статьи последняя версия 2.0.24:
2.3.4.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL_gfx-2.0.24».
2.3.4.3. Компилируем и устанавливаем библиотеку SDL_gfx:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Если при компиляции возникла ошибка:

Выполните команду:

И повторите конфигурирование, а затем компиляцию.

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.4.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «libSDL_gfx-14.dll» в «C:\Qt\MinGW\bin»
Статическая «libSDL_gfx.a» и «libSDL_gfx.dll.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\SDL»
2.3.4.5. На этом установка завершена. При желании можно скомпилировать утилиту «TestGfxTexture.exe»:

При запуске откроется окно, показывающее результат текстурирования.

2.3.5. Компиляция и установка библиотеки SDL_ttf 2.0

Описание:
Официальный сайт:
SDL_ttf 2.0 представляет собой библиотеку отрисовки шрифтов TrueType, и используется вместе с библиотекой SDL. Это позволяет программистам использовать шрифты TrueType без написания собственного рендера шрифта. Благодаря функциям масштабирования шрифтов и антиалиасинга можно получить высокое качество вывода текста без особых усилий.

Сборка:
Внимание! Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.3.5.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_ttf 2.0, на момент написания статьи последняя версия 2.0.11:
2.3.5.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL_ttf-2.0.11» .
2.3.5.3. Компилируем и устанавливаем библиотеку SDL_ttf 2.0:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.5.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «SDL_ttf.dll» в «C:\Qt\MinGW\bin»
Статическая «libSDL_ttf.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\SDL»
2.3.5.5. На этом установка завершена. При желании можно скомпилировать утилиту «showfont.exe»:

Если на «showfont.exe» перетащить любой «.ttf» шрифт — он откроется в окне.

2.3.6. Компиляция и установка библиотеки SDL_mixer

Описание:
Официальный сайт:
SDL_mixer это библиотека микширования звука, которая может использоваться вместе с библиотекой SDL. Она позволяет программистам использовать звуки вместе с музыкой и не писать собственные микшеры. Библиотека также упрощает загрузку, обработку и воспроизведения звуков и музыки всевозможных форматов файлов, в собираемой нами конфигурации библиотека сможет поддерживать такие форматы как «.mp3», «.ogg», «.flac», «.mod» и несколько других.

Сборка:
Внимание! Зависимости:






Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.3.6.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_mixer, на момент написания статьи последняя версия 1.2.12:
2.3.6.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL_mixer-1.2.12».
2.3.6.3. Открываем файл «C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefile.in» и заменяем одинаковые строки #69 и #72:

на строку

после замены сохраняем файл.
2.3.6.4. Компилируем и устанавливаем библиотеку SDL_mixer:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Настоятельно рекомендую использовать декодер MAD, вместо нестабильного и старого smpeg. Если у вас в процессе конфигурирования не подцепляется FLAC, попробуйте сначала ввести строчку:

А потом уже выполнять конфигурирование. Без этой строки «conftest.c» может не слинковаться. После компиляции не забудьте выполнить:

Чтобы очистить переменную окружения LIBS.

Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.6.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «SDL_mixer.dll» в «C:\Qt\MinGW\bin»
Статическая «libSDL_mixer.a» и остальные в «C:\Qt\MinGW\lib»
Хэдер «SDL_mixer.h» в «C:\Qt\MinGW\include\SDL»
2.3.6.6. В комментариях обнаружилась интересная ошибка на стадии линковки, при компилировании библиотеки SDL_mixer компилятором MinGW (GCC 4.7.2). Ошибка возникала из-за того, что libtool, используевшийся для компиляции в SDL_mixer не мог подлинковать библиотеку libpthread, отвечающую за потоки и нужную для дефолтного конфигурирования libmikmod. В данном блоке показана последовательность действий, выполнив которые вы сохраните многопоточность библиотеки libmikmod и сможете скомпилировать и установить библиотеку SDL_mixer.
Все действия актуальны на момент написания этого блока (04.06.2012).

Все библиотеки в зависимостях, кроме MikMod, конфигурируются, компилируются и устанавливаются стандартно.
Библиотека «libmikmod-3.2.0» конфигурируется теперь так:

И, наконец, библиотека «SDL_mixer-1.2.12» компилируется так:
2.3.6.6.1. Открываем файл «C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefile.in» и заменяем строки #26, #69 и #72 на следующие,

сохраняя порядок соответственно.

Затем обычное конфигурирование и компиляция:

Стоит заметить, что теперь приложения, использующие SDL_mixer будут еще требовать и библиотеку «pthreadGC2.dll». В комментариях есть примеры сборок SDL_mixer без libmikmod’a или с libmikmod’ом, но без потоков.
2.3.6.7. На этом установка завершена. Для проверки правильности работы библиотеки можно скомпилировать простейший плеер «sdlwav.exe». Для этого нужно скачать файл ««, сохранить его в папку «C:\Qt\build\SDL» и скомпилировать его следующим образом:

Теперь если на «sdlwav.exe» перетащить любой файл, содержащий музыку или звук в формате «.mp3», «.flac», «.ogg», «.wav» или «.mod» — он должен воспроизвестись, помимо этого должно открыться окно простенького визуализатора, если окно с ним активно то можно перемотать трек стрелками на клавиатуре или поставить его на паузу пробелом.


Работа библиотеки SDL_mixer, скомпилированной MinGW'ом

После запуска в файле «stdout.txt» (он будет рядом с «sdlwav.exe»), или в выводе консоли будут показаны доступные декодеры и их количество. Для нашей конфигурации SDL_mixer получился следующий лог:

2.3.7. Компиляция и установка библиотеки SDL_sound

Описание:
Официальный сайт:
SDL_sound это неофициальная библиотека, расширяющая возможности SDL и позволяющая использовать функции декодирования и воспроизведения таких популярных форматов звуковых файлов, как «.mp3», «.wav» и некоторых других. Она предназначена для упрощения написания приложений. Является аналогом библиотеки SDL_mixer.

Сборка:
Внимание! Зависимости:




Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.3.7.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_sound, на момент написания статьи последняя версия 1.0.3:
2.3.7.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL_sound-1.0.3».
2.3.7.3. Открываем файл «C:\Qt\build\SDL\SDL_sound-1.0.3\decoders\mpglib\mpg123_sdlsound.h» и заменяем строку #8:

таким содержимым:

затем сохраняем файл.
2.3.7.4. Открываем файл «C:\Qt\build\SDL\SDL_sound-1.0.3\decoders\timidity\tables.h» и комментируем строку #23:

затем сохраняем файл.
2.3.7.5. Компилируем и устанавливаем библиотеку SDL_sound:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Если у вас в процессе конфигурирования не подцепляется FLAC, попробуйте сначала ввести строчку:

А потом уже выполнять конфигурирование. Без этой строки «conftest.c» может не слинковаться. После компиляции не забудьте выполнить:

Чтобы очистить переменную окружения LIBS. Библиотека скомпилировалась со стандартными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.7.6. Скомпилированная статическая библиотека и утилиты, заголовочные файлы должны скопироваться в соответствующие папки:
Утилиты «playsound_simple.exe» и «playsound.exe» в «C:\Qt\MinGW\bin»
Статическая «libSDL_sound.a» и остальные в «C:\Qt\MinGW\lib»
Хэдер «SDL_sound.h» в «C:\Qt\MinGW\include\SDL»
2.3.7.7. На этом установка завершена. Для проверки правильности работы библиотеки перенесите любой файл, содержащий музыку или звук в формате «.mp3», «.flac», «.ogg», «.wav» или «.mod» на исполнительный бинарник «playsound.exe», который расположен по адресу «C:\Qt\MinGW\bin», и он должен воспроизвестись.

2.3.8. Компиляция и установка библиотеки SDL_draw

Описание:
Официальный сайт:
Небольшая неофициальная библиотека для рисования различных графических примитивов.

Сборка:
2.3.8.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_draw, на момент написания статьи последняя версия 1.2.13:
2.3.8.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\SDL_draw-1.2.13».
2.3.8.3. Компилируем и устанавливаем библиотеку SDL_draw:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.8.4. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:
Статическая «libSDL_draw.a» в «C:\Qt\MinGW\lib»
Хэдер «SDL_draw.h» в «C:\Qt\MinGW\include\SDL»

2.3.9. Компиляция и установка библиотеки SDL_console

Описание:
Официальный сайт:
SDL_Console реализует выпадающую консоль, как в Quake, которая может быть легко добавлена в любое SDL-приложение. С помощью выполнения предопределенных команд в консоли вы можете легко управлять своим приложением. Добавить можно несколько консолей одновременно.

Сборка:
Внимание! Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.3.9.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_console, на момент написания статьи последняя версия 2.1:
2.3.9.2. Распаковываем скачанный архив в папку «C:\Qt\build\SDL», исходники библиотеки должны быть в папке «C:\Qt\build\SDL\sdlconsole-2.1» .
2.3.9.3. Компилируем и устанавливаем библиотеку SDL_console:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.3.9.4. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:
Статическая «libSDL_console.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\SDL_console»

2.4. Компиляция и установка zlib библиотеки

Описание:
Официальный сайт:
zlib это свободная кроссплатформенная библиотека для сжатия данных. Используется в огромном количестве приложений и библиотек.

Сборка:
2.4.1. Скачиваем последнюю стабильную версию исходников библиотеки zlib, на момент написания статьи последняя версия 1.2.7:
2.4.2. Распаковываем скачанный архив в папку «C:\Qt\build», исходники библиотеки должны быть в папке «C:\Qt\build\zlib-1.2.7».
2.4.3. Если вам необходима динамическая библиотека «zlib1.dll», то открываем файл «C:\Qt\build\zlib-1.2.7\win32\Makefile.gcc» и правим строку #32 следующим образом:

Просто меняем «0» на «1» .
2.4.4. Компилируем и устанавливаем zlib-библиотеку:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

2.4.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «zlib1.dll» в «C:\Qt\MinGW\bin»
Статические «libz.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include»

2.5. Компиляция и установка JPEG библиотеки

Описание:
Официальный сайт:
Функции из библиотеки libjpeg используются различными программами и другими библиотеками для работы с форматами изображений «.jpg», «.jpeg» и другими. Библиотека создана сообществом «Independent JPEG Group».

Сборка:
2.5.1. Скачиваем последнюю стабильную версию исходников библиотеки libjpeg, на момент написания статьи последняя это v9:
2.5.2. Распаковываем скачанный архив в папку «C:\Qt\build\Image», исходники библиотеки должны быть в папке «C:\Qt\build\Image\jpeg-9».
2.5.3. Компилируем и устанавливаем JPEG-библиотеку:
Примечание: если вы собираете библиотеку jpeg, ранней 9-ой версии (jpeg-9 alpha), то для корректной сборки следует выполнить команду:

перед конфигурированием, иначе будет возникать конфликт типов при компиляции (error: conflicting types for ‘jpeg_suppress_tables’).
Сейчас разработчики исправили этот недочет, поэтому команду «autoheader» можно не использовать.

Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.5.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «libjpeg-9.dll» и бинарные программы в «C:\Qt\MinGW\bin»
Статические «libjpeg.a» и «libjpeg.dll.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include»

2.6. Компиляция и установка PNG библиотеки

Описание:
Официальный сайт:
Библиотека libpng — это официальная библиотека для работы с растровой графикой в формате «.png». Библиотека является платформо-независимой и состоит из множества функций.

Сборка:
Внимание! Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.6.1. Скачиваем последнюю стабильную версию исходников библиотеки libpng, на момент написания статьи последняя версия 1.6.3:
2.6.2. Распаковываем скачанный архив в папку «C:\Qt\build\Image», исходники библиотеки должны быть в папке «C:\Qt\build\Image\libpng-1.6.3».
2.6.3. Компилируем и устанавливаем PNG-библиотеку:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.6.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Бинарные программы в «C:\Qt\MinGW\bin»
Статические «libpng.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include»
2.6.5. На этом установка завершена. При желании можно скомпилировать утилиту «pngtest.exe»:

Её запуск выдаст в консоль результаты тестирования файла «pngtest.png», находящегося в папке «libpng-1.6.3».

2.7. Компиляция и установка TIFF библиотек

Описание:
Официальный сайт:
LibTIFF — представляет собой набор библиотек и утилит для просмотра и редактирования изображений формата «.tiff» или «.tif». Создана компьютерной компанией Silicon Graphics.

Сборка:
Внимание! Зависимости:


Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.7.1. Скачиваем последнюю стабильную версию исходников библиотеки libtiff, на момент написания статьи последняя версия 4.0.3:
2.7.2. Распаковываем скачанный архив в папку «C:\Qt\build\Image», исходники библиотеки должны быть в папке «C:\Qt\build\Image\tiff-4.0.3».
2.7.3. Компилируем и устанавливаем TIFF-библиотеки:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.7.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамические библиотеки «libtiff-5.dll», «libtiffxx-5.dll» и бинарные программы в «C:\Qt\MinGW\bin»
Статические «libtiff.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include»

2.8. Компиляция и установка библиотеки FreeType 2

Описание:
Официальный сайт:
FreeType 2 — библиотека для растеризации шрифтов и операций над ними. Библиотека значительно упрощает операции обработки текста и используется во многих nix-подобных системах.

Сборка:
Внимание! Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.8.1. Скачиваем последнюю стабильную версию исходников библиотеки FreeType 2, на момент написания статьи последняя версия 2.5.0.1:
2.8.2. Распаковываем скачанный архив в папку «C:\Qt\build», исходники библиотеки должны быть в папке «C:\Qt\build\freetype-2.5.0.1» .
2.8.3. Компилируем и устанавливаем библиотеку FreeType 2:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.8.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «libfreetype-6.dll» в «C:\Qt\MinGW\bin»
Статическая «libfreetype.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\freetype2\freetype»

2.9. Компиляция и установка OGG библиотеки

Описание:
Официальный сайт:
OGG это мультимедийный формат, представляющий собой контейнер для родных (нативных) файлов и формат потока для различных мультимедийных кодеков. Формат OGG является потокоориентированным.

Сборка:
2.9.1. Скачиваем последнюю стабильную версию исходников библиотеки OGG, на момент написания статьи последняя версия 1.3.1:
2.9.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\libogg-1.3.1» .
2.9.3. Компилируем и устанавливаем библиотеку OGG:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.9.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «libogg-0.dll» в «C:\Qt\MinGW\bin»
Статическая «libogg.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\ogg»

2.10. Компиляция и установка OggVorbis (libVorbis) библиотеки

Описание:
Официальный сайт:
OggVorbis это новый формат сжатия звука. Он примерно сопоставим с другими популярными форматами, используемыми для хранения и воспроизведения цифровой музыки, такими как MP3, VQF, AAC и другими. OggVorbis отличается от других форматов тем, что он полностью бесплатный, открытый и спецификации кодека Vorbis относятся к общественному достоянию.

Сборка:
Внимание! Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.10.1. Скачиваем последнюю стабильную версию исходников библиотеки OggVorbis (libVorbis), на момент написания статьи последняя версия 1.3.3:
2.10.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\libvorbis-1.3.3».
2.10.3. Компилируем и устанавливаем библиотеку OggVorbis (libVorbis):
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.10.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамические библиотеки «libvorbis-0.dll», «libvorbisfile-3.dll» и «libvorbisenc-2.dll» в «C:\Qt\MinGW\bin»
Статические «libvorbis.a», «libvorbisenc.a», «libvorbisfile.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\vorbis»

2.11. Компиляция и установка библиотеки FLAC

Описание:
Официальный сайт:
FLAC расшифровывается как Free Lossless Audio Codec, этот аудиоформат аналогичен формату MP3, но сжатие в нем происходит без потерь качества. Он работает подобно ZIP, но с FLAC вы получите гораздо лучшее сжатие, поскольку разработан он был специально для звука. Из аналогичных кодеков FLAC выделяется тем, что он не только самый быстрый, но еще и не являеющийся чей-либо собственностью, а следовательно не обременёный патентами. Кроме того, FLAC имеет открытые исходники эталонной реализации, хорошо документированный формат и API.

Сборка:
Внимание! Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.11.1. Скачиваем последнюю стабильную версию исходников библиотеки FLAC, на момент написания статьи последняя версия 1.2.1:
2.11.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\flac-1.2.1» .
2.11.3. Открываем файл «C:\Qt\build\Audio\flac-1.2.1\include\share\alloc.h», и заменяем строку #38 (# ifdef _MSC_VER) такой строкой:

после добавления сохраняем файл.
2.11.4. Открываем файл «C:\Qt\build\Audio\flac-1.2.1\examples\cpp\encode\file\main.cpp», добавляем после строки #32 (#include <stdlib.h>) такую строку (добавляем хэдер):

после добавления сохраняем файл.
2.11.5. Компилируем и устанавливаем библиотеку FLAC:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.11.6. Скомпилированные статическая библиотека, бинарные утилиты и заголовочные файлы должны скопироваться в соответствующие папки:
Исполнительные бинарники «flac.exe» и «metaflac.exe» в «C:\Qt\MinGW\bin»
Статические библиотеки «libFLAC.a» и «libFLAC++.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\FLAC» и в «C:\Qt\MinGW\include\FLAC++»

2.12. Компиляция и установка библиотеки MikMod

Описание:
Официальный сайт:
Библиотека MikMod предназначена для работы с трекерной музыкой. Написанные специально для MS-DOS, плеер и библиотека, впоследствии были портированы на другие платформы, такие как Unix, Macintosh, BeOS и Java.

Сборка:
2.12.1. Скачиваем последнюю стабильную версию исходников библиотеки MikMod, на момент написания статьи последняя версия 3.2.0:
2.12.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\libmikmod-3.2.0».
2.12.3. Открываем файл «C:\Qt\build\Audio\libmikmod-3.2.0\drivers\drv_pipe.c», добавляем после строки #33 такую строку:

после добавления сохраняем файл.
2.12.4. Открываем файл «C:\Qt\build\Audio\libmikmod-3.2.0\playercode\mdriver.c», добавляем после строки #27 такую строку:

после добавления сохраняем файл.
2.12.5. Компилируем и устанавливаем библиотеку MikMod:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.12.6. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:
Конфигурационный «libmikmod-config» в «C:\Qt\MinGW\bin»
Статическая библиотека «libmikmod.a» в «C:\Qt\MinGW\lib»
Хэдер «mikmod.h» в «C:\Qt\MinGW\include»

2.13. Компиляция и установка библиотеки MAD (libmad)

Описание:
Официальный сайт:
MAD (libmad) это высококачественный MPEG-audio декодер. В настоящее время он поддерживает MPEG-1 и MPEG-2, а также формат MPEG 2.5. Все три аудио слоя — Layer I, Layer II и Layer III (MP3) — декодер поддерживает в полном объеме.
MAD пока не работает с многоканальным MPEG-2 звуком (хотя он должен быть совместим с потоком) и не поддерживает AAC.

Сборка:
2.13.1. Скачиваем последнюю стабильную версию исходников библиотеки MAD (libmad), на момент написания статьи последняя версия 0.15.1b:
2.13.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\libmad-0.15.1b».
2.13.3. Открываем файл «C:\Qt\build\Audio\libmad-0.15.1b\configure» обычным текстовым редактором (я советую использовать Notepad++) и находим строку #19102:

и удаляем ее вместе с переносами. То есть чтобы строкой #19102 стала строка:

После модификации сохраняем файл.
2.13.4. Компилируем и устанавливаем библиотеку MAD (libmad):
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.13.5. Скомпилированная статическая библиотека, заголовочные файлы должны скопироваться в соответствующие папки:
Статическая библиотека «libmad.a» в «C:\Qt\MinGW\lib»
Хэдер «mad.h» в «C:\Qt\MinGW\include»

2.14. Компиляция и установка библиотеки OpenAL

Описание:
Официальный сайт:
OpenAL или Open Audio Library, это свободно распространяемая кроссплатформенная библиотека API для работы с аудиоданными. Ключевая особенность — работа со звуком в 3D пространстве и использование эффектов EAX. Библиотека разработана фирмой Loki Software и в настоящий поддерживается компанией Creative.

Сборка:
Внимание!
Для компиляции необходим

2.14.1. Скачиваем последнюю стабильную версию исходников библиотеки OpenAL, на момент написания статьи последняя версия 1.13:
2.14.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\openal-soft-1.13».
2.14.3. Компилируем и устанавливаем библиотеку OpenAL:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

2.14.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы и утилиты должны скопироваться в соответствующие папки:

2.15. Компиляция и установка библиотеки ALUT (freealut)

Описание:
Официальный сайт:
Freealut это свободная реализация стандарта OpenAL’s ALUT.

Сборка:
Внимание!
Для компиляции необходим

Зависимости:

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.15.1. Скачиваем последнюю стабильную версию исходников библиотеки ALUT (freealut), на момент написания статьи последняя версия 1.1.0:
2.15.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\freealut-1.1.0».
2.15.3. Компилируем и устанавливаем библиотеку ALUT (freealut):
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

2.15.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

2.15.5. Компиляция и запуск демо-кода.
2.15.5.1. Создаем файл «alutdemo.c» в папке «C:\Qt\build\Audio», вставляем в него такое содержимое:

и сохраняем.
2.15.5.2. Для компиляции кода запускаем «C:\Qt\MinGW\msys.0\msys.bat» и набираем в консольном окне такие команды:

Данные команды скомпилируют код в исполнительный файл «alutdemo.exe», при запуске которого вы услышите фразу «Hello, World!».

2.16. Компиляция и установка cURL (libcurl) библиотеки

Описание:
Официальный сайт:
Библиотека Libcurl — представляет собой реализацию интерфейса API для различных передач, которую программисты могут встроить в свои программы. cURL действует как автономная обёртка для библиотеки libcurl.

Сборка:
Внимание! Зависимости:
(Опционально. Сборка возможна и без нее.)
(Опционально. Нужна для сборки библиотеки cURL для ‘a)
(Опционально. Нужен для сборки библиотеки cURL для ‘a)
Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.16.1. Скачиваем последнюю стабильную версию исходников библиотеки cURL (libcurl), на момент написания статьи последняя версия 7.28.1:
2.16.2. Распаковываем скачанный архив в папку «C:\Qt\build», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\curl-7.28.1» .
2.16.3. Компилируем и устанавливаем библиотеку cURL:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Если при конфигурации возникла ошибка:

Попробуйте отключить антивирус. Антивирусу «Avira Free Antivir» не понравился один из тестовых исполнительных файлов, создаваемых во время конфигурации.
Итак, библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.16.4. Cборка библиотеки cURL для ‘a с помощью . Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

2.16.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы и утилиты должны скопироваться в соответствующие папки:
Утилита «curl.exe», динамическая библиотека «libcurl-4.dll» или «libcurl.dll», если использовался в «C:\Qt\MinGW\bin»
Статическая «libcurl.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\curl»

2.17. Компиляция и установка библиотеки libmodplug

Описание:
Официальный сайт:
Библиотека libmodplug предназначена для работы с трекерной музыкой. Является аналогом библиотеки MikMod.

Сборка:
2.17.1. Скачиваем последнюю стабильную версию исходников библиотеки libmodplug, на момент написания статьи последняя версия 0.8.8.4:
2.17.2. Распаковываем скачанный архив в папку «C:\Qt\build\Audio», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\Audio\libmodplug-0.8.8.4».
2.17.3. Компилируем и устанавливаем библиотеку libmodplug:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.17.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «libmodplug-1.dll» в «C:\Qt\MinGW\bin»
Статическая «libmodplug.dll.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\libmodplug»

2.18. Компиляция и установка библиотеки и утилит OpenSSL

Описание:
Официальный сайт:
OpenSSL — криптографический пакет (утилиты + библиотеки) с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать различные ключи типа RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT. Кроме того имеется возможность шифрования данных и тестирования SSL/TLS соединений.

Сборка:
2.18.1. Скачиваем последнюю стабильную версию исходников библиотеки OpenSSL, на момент написания статьи последняя версия 1.0.1c:
2.18.2. Распаковываем скачанный архив в папку «C:\Qt\build», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\openssl-1.0.1c».
2.18.3. Компилируем и устанавливаем библиотеку OpenSSL:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Компилирование OpenSSL и его установка, достаточно долговременный процесс.
2.18.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы и утилиты должны скопироваться в соответствующие папки:
Утилита «openssl.exe» в «C:\Qt\MinGW\bin»
Статические «libssl.a» и «libcrypto.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\openssl»

2.19. Компиляция и установка библиотеки Expat

Описание:
Официальный сайт:
Expat — это свободная потокоориентированная библиотека парсинга для XML. Один из наиболее доступных XML парсеров, достаточно широко используется в открытом программном обеспечении.

Сборка:
2.19.1. Скачиваем последнюю стабильную версию исходников библиотеки Expat, на момент написания статьи последняя версия 2.1.0:
2.19.2. Распаковываем скачанный архив в папку «C:\Qt\build», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\expat-2.1.0».
2.19.3. Компилируем и устанавливаем библиотеку Expat:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.19.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Динамическая библиотека «libexpat-1.dll» в «C:\Qt\MinGW\bin»
Статическая «libexpat.a» и остальные в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include»

2.20. Компиляция и установка библиотеки ZZIPlib

Описание:
Официальный сайт:
ZZIPlib — это легковесная библиотека для работы со сжатыми файлами и ZIP-архивами.

Сборка:
Внимание! Зависимости:


Перед компиляцией библиотеки скомпилируйте и установите все зависимости!
2.20.1. Устанавливаем Python в папку «C:\Qt\Python272».
2.20.2. Скачиваем последнюю стабильную версию исходников библиотеки ZZIPlib, на момент написания статьи последняя версия 0.13.62:
2.20.3. Распаковываем скачанный архив в папку «C:\Qt\build», исходники библиотеки и утилит должны быть в папке «C:\Qt\build\zziplib-0.13.62».
2.20.4. Открываем файл «C:\Qt\build\zziplib-0.13.62\configure», находим в файле строки:

и заменяем на:

всего две таких строки.

2.20.5. Компилируем и устанавливаем библиотеку ZZIPlib:
Запускаем «C:\Qt\MinGW\msys.0\msys.bat» или ConEmu и набираем в консольном окне такие команды:

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду

2.20.6. Скомпилированные статические библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:
Статические «libzzip.a» в «C:\Qt\MinGW\lib»
Хэдеры в «C:\Qt\MinGW\include\zzip»

3. Интеграция MinGW с IDE

Разрабатывать приложения, пользуясь консольной оболочкой, не всем привычно, да и идти нужно в ногу со временем. Поэтому вместе с нашим собранным тулчейном я рекомендую использовать среду разработки от Digia.
Среда также позволит вам разрабатывать оконные приложения, используя мощнейший фреймворк Qt. Цена вопроса — 300-400 МБ для загрузки сборки под MinGW. Зато удобств — максимум. В QtCreator есть и автодополнение кода и настраиваемая подсветка, есть даже режим эмуляции vim, если вы уж так к нему привыкли.
Внешний вид QtCreator (изображение кликабельно):


Внешний вид QtCreator

Установка предельно проста:
1. Нужно загрузить сборку библиотек Qt для MinGW (на момент написания статьи их последняя версия 4.8.4): .
2. Установить библиотеки в «C:\Qt\qt-4.8.4», установщик спросит путь к компилятору, следует указать «C:\Qt\MinGW», если установщик ругнется на хэдер, ничего страшного, можно продолжить.
3. Загрузить собственно сам QtCreator (на момент написания статьи его последняя версия 2.6.1): .
4. Установить QtCreator в «C:\Qt\qtcreator-2.6.1».
5. Среда готова к написанию программ! Кстати, кроме удобного qmake, имеется встроенная поддержка CMake, конечно при условии, что мы этот cmake установили.

Если у вас возникли проблемы по установке, настоятельно рекомендую посетить замечательный сайт , там вы найдете различные мануалы по установке и тонкой настройки этой IDE.


Источник: http://exlmoto.ru/mingw-development-environment/



Компиляция как сделать

Компиляция как сделать

Компиляция как сделать

Компиляция как сделать

Компиляция как сделать

Компиляция как сделать

Компиляция как сделать

Компиляция как сделать

Компиляция как сделать