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

Данный мануал создавался с целью быть пособием и заметкой для разработчиков, помочь им собрать и настроить собственное окружение для разработки нативных приложений в семействе OS Windows.
Содержание:
1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО
1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение
1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat
1.3. Компиляция и установка pkg-config
1.4. Установка CMake, примеры использования
1.5. Установка Subversion (svn)
1.6. Компиляция и установка git
2. Компиляция и установка библиотек в тулчейн MinGW
2.1. Компиляция и установка библиотеки FreeGLUT
2.2. Компиляция и установка библиотеки GLUT
2.3. Компиляция и установка библиотек SDL-окружения
2.3.1. Компиляция и установка основной библиотеки SDL
2.3.2. Компиляция и установка библиотеки SDL_image
2.3.3. Компиляция и установка библиотеки SDL_net
2.3.4. Компиляция и установка библиотеки SDL_gfx
2.3.5. Компиляция и установка библиотеки SDL_ttf 2.0
2.3.6. Компиляция и установка библиотеки SDL_mixer
2.3.7. Компиляция и установка библиотеки SDL_sound
2.3.8. Компиляция и установка библиотеки SDL_draw
2.3.9. Компиляция и установка библиотеки SDL_console
2.4. Компиляция и установка zlib библиотеки
2.5. Компиляция и установка JPEG библиотеки
2.6. Компиляция и установка PNG библиотеки
2.7. Компиляция и установка TIFF библиотек
2.8. Компиляция и установка библиотеки FreeType 2
2.9. Компиляция и установка OGG библиотеки
2.10. Компиляция и установка OggVorbis (libVorbis) библиотеки
2.11. Компиляция и установка FLAC библиотеки
2.12. Компиляция и установка библиотеки MikMod
2.13. Компиляция и установка библиотеки MAD (libmad)
2.14. Компиляция и установка библиотеки OpenAL
2.15. Компиляция и установка библиотеки ALUT (freealut)
2.16. Компиляция и установка cURL (libcurl) библиотеки
2.17. Компиляция и установка библиотеки libmodplug
2.18. Компиляция и установка библиотеки и утилит OpenSSL
2.19. Компиляция и установка библиотеки Expat
2.20. Компиляция и установка библиотеки ZZIPlib
3. Интеграция MinGW с IDE
1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО
Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.
MinGW – сокращение от “Minimalist GNU for Windows”, по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.
MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.
MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует Cygwin. В первую очередь 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 предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.
Полезные ссылки:
Официальный сайт MinGW
Вики по MinGW [ENG]
1.1. Устанавливаем MinGW, оболочку MSYS и настраиваем окружение
1.1.1. Скачиваем официальный онлайн-установщик MinGW, на данный момент последняя версия установщика 20120426: mingw-get-inst-latest.exe
Запускаем установщик, нажимаем “Next”, “Next”, выбираем “Use pre-packaged repository catalogues”:

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

Рекомендуется выбирать путь без пробелов, лучше всего устанавливать 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”

затем подтверждаем установку выбранных пакетов кнопкой “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”, разделение путей выполняется символом “;”.

1.1.1.5. Подробнее можно прочесть здесь.
Все, тулчейн MinGW и его оболочка MSYS установлены. Теперь можно перейти к установке дополнительных программ, которые помогут облегчить нам жизнь.
1.1.2. Установка дополнительных пакетов и полезные команды и утилиты.
Сразу после установки MinGW и MSYS будет полезно установить некоторые пакеты.
Для этого запускаем файл “C:\Qt\MinGW\msys\1.0\msys.bat”, для которого, кстати, полезно будет создать ярлык, и набираем там такие команды (переход на новую строку аналогичен нажатию клавиши “Enter”):
mingw-get install msys-man mingw-get install msys-wget mingw-get install msys-zip mingw-get install msys-unzip mingw-get install msys-bzip2 mingw-get install msys-perl
Команда “mingw-get install” аналогична популярной на разных Linux-дистрибутивах, наверное, знакомой многим, команде “apt-get install”. Обе эти команды скачают и установят вам нужный пакет из репозиториев.
Список доступных пакетов для установки можно посмотреть по команде “mingw-get show”, для лучшего восприятия его можно отсортировать следующим образом:
mingw-get show | grep "Package: "
Удалить установленный пакет можно командой “mingw-get remove выбранный_вами_пакет”
Обновить пакет можно командой “mingw-get upgrade выбранный_вами_пакет”, команда “mingw-get upgrade” обновит все пакеты вашего тулчейна полностью.
На этом базовая настройка тулчейна закончена, можно приступить к сборке/переносу проектов или более тонкой настройке.
1.1.3. Какие утилиты будет полезно использовать вместе с MinGW?
Для редактирования исходников и других файлов можно использовать консольный редактор “vim”, который идет в комплекте с MinGW’ом.
Но если вы привыкли к оконному интерфейсу, воспользуйтесь отличнейшим редактором – Notepad++.
Для распаковки содержимого архивов можно использовать консольные команды или архиваторы с GUI, такие как WinRar, например.
Лично я рекомендую использовать 7-zip.
1.1.4. Что можно почитать?
Список литературы можно найти здесь: http://www.linuxcenter.ru/
Основы работы в консоли
Интерпретатор командного языка shell
Самые необходимые команды *nix для обработки ввода/вывода
Совет по поводу определения fstab
1.2. Настройка MinGW/MSYS: используем продвинутую консоль, вместо msys.bat
Возможно многим разработчикам стандартный шел, вызываемый по “msys.bat” покажется унылым и скучным:

Еще бы, работать в такой консоли достаточно неудобно, хотя бы из-за отсутствия нормального копипаста.
Но к счастью, есть такой проект как ConEmu от Maximus5‘а, являющийся продвинутым форком ConEmu by Zoin.
ConEmu – это очень удобный и симпатичный терминал, поддерживающий вкладки. Его подробнейшее описание, написанное самим автором этой программы, можно прочитать здесь. Самым главным преимуществом для меня является нормальный копипаст. Здесь он реализован просто замечательно, с помощью левой кнопки мышки или сочетания “Alt + Левая кнопка мышки” можно выделить блок или строку в консоли соответственно. После выделения строка сразу автоматом скопируется в буфер. Сочетание клавиш “Ctrl + V” или клик левой клавишей мышки вставляет первую строку из буфера, а “Shift + Insert + Enter” вставляет сразу все строки.
Для связки ConEmu и MinGW, нам необходимо скачать специально подготовленные пакеты ConEmu для MinGW. Установка весьма проста и тривиальна – нужно лишь распаковать “-mingw32” и “-mingw64” пакеты в корневую папку компилятора (в моем случае это “C:\Qt\MinGW”).
Если вы не хотите настраивать консоль, можете скачать уже настроенную мной:
Скачать ConEmu.zip, 1.7 MB
Выглядит она следующим образом (изображение кликабельно):
И устанавливается абсолютно аналогично.
На мой взгляд панелька в стиле терминала Quake, выезжающая сверху экрана по нажатию “Ctrl + ~”, не только эффектно выглядит, но и очень удобна в использовании.
При желании, конечно, можно все очень и очень гибко настраивать под себя, программа ConEmu имеет множество настроек и совместима со всеми последними OS семейства Windows.
1.3. Компиляция и установка утилиты pkg-config
Официальный сайт pkg-config: http://pkg-config.freedesktop.org/
pkg-config это утилита, которая предоставляет общий интерфейс для получения информации об установленных в системе программных библиотеках с целью компиляции программ из исходного кода.
В нашем случае она нужна для компиляции некоторых библиотек и проектов.
1.3.1. Скачиваем последнюю версию исходников pkg-config’а, на момент написания статьи это 0.28: pkg-config-0.28.tar.gz
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\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:
Кстати, небольшой, но полезный совет! Если у вас многоядерный процессор, то при вызове утилиты make можно воспользоваться ключом “-jX”, где X – число одновременно выполняемых потоков компиляции, которое зависит от количества ядер процессора n. Обычно рекомендуется брать X = n + 1, но если процессор поддерживает технологию Hyper-threading, то число потоков следует брать X = 2 · N + 1. То есть команды компиляции для двухъядерного процессора будут следующими: “make -j3” и “make -j3 install”. Благодаря распараллеливанию компиляции время сборки крупных проектов значительно сокращается.
export CFLAGS="-march=native" cd /c/Qt/build/pkg-config-0.28 ./configure --with-internal-glib --prefix=/mingw make make install export -n CFLAGS
Утилита и библиотека скомпилировались и установились.
1.3.4. Чтобы обойти ошибку в MSYS, следует выполнить в консоли блок таких команд:
cat > /mingw/bin/pkg-config.sh << "EOF" #!/bin/sh if pkg-config "$@" > /dev/null 2>&1 ; then res=true else res=false fi pkg-config "$@" | tr -d \\r && $res EOF
Это создаст файл “pkg-config.sh” в папке “C:\Qt\MinGW\bin”
1.3.5. Теперь нужно сделать скрипт исполнительным и добавить переменную в альтернативное окружение:
chmod ugo+x /mingw/bin/pkg-config.sh && \ echo "PKG_CONFIG=/mingw/bin/pkg-config.sh" >> /etc/profile.local && \ echo "export PKG_CONFIG" >> /etc/profile.local
1.3.6. Когда вам понадобится альтернативное окружение, вы всегда можете подгрузить его командой:
source /etc/profile.local
1.4. Установка CMake, примеры использования
Официальный сайт CMake: http://www.cmake.org
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): cmake-2.8.10.2-win32-x86.exe
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”

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

1.4.1.5. При желании можно создать группу ярлыков в меню “Пуск”. Щелкаем “Установить”, ждем окончания установки и нажимаем “Готово”. Всё! CMake установлен.
1.4.2 Примеры использования CMake:
1.4.2.1. Немного основ, общие советы.
Для сборки проекта с помощью CMake в корневой директории проекта создается файл “CMakeLists.txt”, описывающий этот проект и его зависимости. Примеры компилирования библиотек с помощью утилиты CMake можно найти здесь:
Компиляция и установка библиотеки OpenAL
Компиляция и установка библиотеки ALUT (freealut)
1.4.2.2. Пример моего “CMakeLists.txt” для сборки примера “oldglutdemo.c” из пункта 2.2.9.1, с использованием библиотеки GLUT:
project(GLUT-Req) cmake_minimum_required(VERSION 2.8) aux_source_directory(. SRC_LIST) set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib") set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include") ########################################################## find_package(OpenGL REQUIRED) if(NOT OPENGL_FOUND) message(SEND_ERROR "Failed to find OpenGL") return() else() include_directories(${OPENGL_INCLUDE_DIR}) endif() ########################################################## find_package(GLUT REQUIRED) if(NOT GLUT_FOUND) message(SEND_ERROR "Failed to find GLUT") return() else() include_directories(${GLUT_INCLUDE_DIR}) endif() ########################################################## link_libraries(${OPENGL_LIBRARY} ${GLUT_LIBRARIES}) add_executable(${PROJECT_NAME} ${SRC_LIST})
Текст выше нужно выделить и сохранить в файл с именем “CMakeLists.txt”, затем файл “oldglutdemo.c” и “CMakeLists.txt” нужно поместить в отдельную папку, например “C:\Qt\build\GLUT\glut-3.7.6\cmake-test”.
Далее набираем в консольном окне такие команды:
cmake -G "MSYS Makefiles" make make install
И в итоге получаем исполнительный файл “GLUT-Req.exe”. Обратите внимание на:
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Qt/MinGW/lib") set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Qt/MinGW/include/GL;C:/Qt/MinGW/include")
Без установки этих переменных CMake не видит библиотеку GLUT.
1.4.2.3. Переменные:
cmake -DCMAKE_INSTALL_PREFIX:PATH="/mingw" -DCMAKE_C_FLAGS:STRING="-march=i686" -DCMAKE_CPP_FLAGS:STRING="" -DCMAKE_CXX_FLAGS:STRING="" \ -DCMAKE_EXE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -DCMAKE_MODULE_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" \ -DCMAKE_SHARED_LINKER_FLAGS:STRING="-L/usr/local/lib -L/opt/local/lib" -G "MSYS Makefiles"
Из названий переменных все должно быть понятно:
-DCMAKE_INSTALL_PREFIX:PATH #- путь, куда будет устанавливаться программа после "make install". -DCMAKE_C_FLAGS:STRING #- Установка флагов для файлов "*.c" -DCMAKE_CPP_FLAGS:STRING / -DCMAKE_CXX_FLAGS:STRING #- Установка флагов для файлов "*.cpp" и "*.cxx" соответственно. -DCMAKE_EXE_LINKER_FLAGS:STRING / -DCMAKE_MODULE_LINKER_FLAGS:STRING / -DCMAKE_SHARED_LINKER_FLAGS:STRING #- Установка файлов линковки.
Каталог с исходниками можно оставить в чистом состоянии. Для этого следует перейти в сборочный каталог (в данном случае “build_project”) и разверенуть в него дерево исходного кода с последующей генерацией Makefile’ов. Пример:
cd build_project/ cmake -G "MSYS Makefiles" --build ../project/src/
В аргумент “build” необходимо прописать путь до каталога с исходным кодом, который нужно оставить чистым. После выполнения команды в каталоге “build_project/” создастся полная копия дерева проекта и в этом каталоге можно будет выполнять дальнейшую сборку.
1.4.2.4. Кросскомпиляция с помощью CMake.
В папке с проектом создаем файл с расширением “.cmake”, например, “Toolchain-eldk-ppc74xx.cmake”, с подобным содержимым:
# this one is important SET(CMAKE_SYSTEM_NAME Linux) #this one not so much SET(CMAKE_SYSTEM_VERSION 1) # specify the cross compiler SET(CMAKE_C_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc) SET(CMAKE_CXX_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++) # where is the target environment SET(CMAKE_FIND_ROOT_PATH /opt/eldk-2007-01-19/ppc_74xx /home/alex/eldk-ppc74xx-inst) # search for programs in the build host directories SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
И конфигурируем проект:
cmake -DCMAKE_TOOLCHAIN_FILE=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
Подробнее можно прочесть тут: CMake Cross Compiling
1.4.3 Что почитать про CMake? (литература):
Из наиболее полезного:
http://exlmoto.ru/mingw-development-environment/
http://www.linux.org.ru/forum/desktop/10819573
https://msys2.github.io/
