Замена Visual Studio

Визуальная студия в очередной раз не оправдала возложенных на неё надежд :-) Писать в ней (и с её библиотеками) человеку привыкшему к Linux (BSD, *nix) мучительно больно. Нехватает библиотек, нехватает привычных средств работы с текстом и проектами. Какое-то время честно пытался работать в студии, но быстро скатился что от неё использую только редактор. Дальше хуже - редактор внешний, а от студии только «командная строка разработчика» для компиляции и сброки.

Последней каплей стало то в очередном проекте понадобились pcre и iconv. Вполне естественное требование для софта работающего с текстом. Но собрать и поставить эти библиотеки в студию оказалось непростой задачей.

В итоге - к чёрту студию, есть другие компиляторы, библиотеки и IDE. Не столь монструозные и к тому не требующие «регистрации разработчика».

Ставлю привычные компиляторы, тулзы и библиотеки из MinGW и CodeBlocks как среду разработки.


Устанавливаем GCC, утилиты и библиотеки из комплекта MinGW-64. Собственно ознакомившись с http://mingw-w64.org переходим на http://win-builds.org и скачиваем полный toolchain.

Далее под win10 приходится делать некоторые усилия - отключать антивир(точнее фаервол) и запускать инсталлятор с правами администратора. Этот баг известен и монтейнеры/разработчики win-build в курсе проблемы, но явно не успевают за чужой паранойей :-)

В качестве каталога для распаковки/инсталляции крайне рекомендую использовать C:\MinGW - именно по этому пути многие внешние утилиты/программы ищут gcc

После того инсталлятор скачает и распакует все требуемые архивы остаётся только добавить некоторые переменные в окружение, а именно :

  • Добавить C:\MinGW\bin;C:\MinGW\mingw\bin в PATH
  • PKG_CONFIG_LIBDIR=C:\MinGW\lib\pkgconfig
  • QMAKEPATH=C:\MinGW
  • QMAKESPEC=win32-g++

После изменения окружения надо выйти-войти или перезагрузить компьютер :-)

Теперь можно проверить что получилось открыв командную строку (запустив cmd.exe) и запустить:

  • gcc –version
  • gmake –version
  • pkg-config –list-all
C:\src\>gmake --version
GNU Make 4.0
Built for i686-w64-mingw32
Copyright (C) 1988-2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

C:\src\>gcc --version
gcc.EXE (GCC) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ao                    ao - ao is a cross-platform audio output library
atk                   Atk - Accessibility Toolkit
cairo-fc              cairo-fc - Fontconfig font backend for cairo graphics library
cairo-ft              cairo-ft - FreeType font backend for cairo graphics library
cairo-gobject         cairo-gobject - gobject functions for cairo graphics library
cairo-pdf             cairo-pdf - PDF surface backend for cairo graphics library
cairo-png             cairo-png - PNG functions for cairo graphics library
cairo-ps              cairo-ps - PostScript surface backend for cairo graphics library
cairo-script          cairo-script - script surface backend for cairo graphics library
cairo-svg             cairo-svg - SVG surface backend for cairo graphics library
cairo-win32-font      cairo-win32-font - Microsoft Windows font backend for cairo graphics library
cairo-win32           cairo-win32 - Microsoft Windows surface backend for cairo graphics library
cairo                 cairo - Multi-platform 2D graphics library
check                 Check - A unit test framework for C
dbus-1                dbus - Free desktop message bus
ddjvuapi              ddjvuapi - DjVu decoding api.
dvdnav                libdvdnav - DVD Navigation library
dvdread               libdvdread - Low level DVD access library
ecore-audio-cxx       ecore-audio-cxx - E core library, audio module C++ API
ecore-audio           ecore-audio - E core library, audio module
ecore-avahi           ecore-avahi - E core library, avahi integration
ecore-con             ecore-con - E core library, Con module
ecore-evas            ecore-evas - E core library, Evas module
ecore-file            ecore-file - E core library, File module
ecore-imf-evas        ecore-imf-evas - E core library, IMF Evas module
ecore-imf             ecore-imf - E core library, IMF module
ecore-input-evas      ecore-input-evas - E core library, Input module Evas extension
ecore-input           ecore-input - E core library, Input module
ecore-ipc             ecore-ipc - E core library, IPC module
ecore-win32           ecore-win32 - E core library, Win32 module
ecore                 ecore - Ecore event abstraction library
edje                  edje - Enlightened graphical design and layout engine.
eet                   eet - Library for speedy data storage, retrieval, and compression
efreet-mime           efreet-mime - Freedesktop Shared Mime Info standard implementation for the EFL
efreet-trash          efreet-trash - Freedesktop Shared Trash implementation for the EFL
efreet                efreet - Freedesktop standards implementation for the EFL
eina                  Eina - A Library that implements fast data types and miscellaneous tools
eio                   eio - Enlightenned Asynchronous Input Output library
eldbus                eldbus - D-Bus access from Ecore
elementary            elementary - Mobile device touchscreen widget library
embryo                embryo - A small virtual machine engine and bytecode compiler
emotion               emotion - Emotion evas based multimedia library
Enginio               Enginio - Enginio module
eo                    Eo - EFL's generic object system library.
eolian                eolian - EFL's .eo parser and code generator.
ethumb                ethumb - Thumbnail Generator Library
ethumb_client         ethumb_client - Thumbnail Client Library
evas-software-buffer  evas-software-buffer - Evas software buffer engine
evas-software-ddraw   evas-software-ddraw - Evas software DirectDaw engine
evas-software-gdi     evas-software-gdi - Evas software GDI engine
evas                  evas - Evas canvas display library
evil                  evil - Library that ports on Windows some specific Unix functions.
expat                 expat - expat XML parser
flac                  FLAC - Free Lossless Audio Codec Library
flac++                FLAC++ - Free Lossless Audio Codec Library (C++ API)
fontconfig            Fontconfig - Font configuration and customization library
freetype2             FreeType 2 - A free, high-quality, and portable font engine.
fribidi               GNU FriBidi - Unicode Bidirectional Algorithm Library
gail                  Gail - GNOME Accessibility Implementation Library
gdk-2.0               GDK - GTK+ Drawing Kit (win32 target)
gdk-pixbuf-2.0        GdkPixbuf - Image loading and scaling
gdk-win32-2.0         GDK - GTK+ Drawing Kit (win32 target)
gio-2.0               GIO - glib I/O library
gio-windows-2.0       GIO Windows specific APIs - Windows specific headers for glib I/O library
glib-2.0              GLib - C Utility Library
gmodule-2.0           GModule - Dynamic module loader for GLib
gmodule-export-2.0    GModule - Dynamic module loader for GLib
gmodule-no-export-2.0 GModule - Dynamic module loader for GLib
gnutls                GnuTLS - Transport Security Layer implementation for the GNU system
gobject-2.0           GObject - GLib Type, Object, Parameter and Signal Library
gthread-2.0           GThread - Thread support for GLib
gtk+-2.0              GTK+ - GTK+ Graphical UI Library (win32 target)
gtk+-win32-2.0        GTK+ - GTK+ Graphical UI Library (win32 target)
harfbuzz              harfbuzz - Text shaping library
hogweed               Hogweed - Nettle low-level cryptographic library (public-key algorithms)
icu-i18n              icu-i18n - International Components for Unicode: Internationalization library
icu-io                icu-io - International Components for Unicode: Stream and I/O Library
icu-le                icu-le - International Components for Unicode: Layout library
icu-lx                icu-lx - International Components for Unicode: Paragraph Layout library
icu-uc                icu-uc - International Components for Unicode: Common and Data libraries
id3tag                id3tag - ID3 tag reading library
jansson               Jansson - Library for encoding, decoding and manipulating JSON data
json-c                json-c - JSON implementation in C
lcms                  lcms - LCMS Color Management Library
lcms2                 lcms2 - LCMS Color Management Library
libarchive            libarchive - library that can create and read several streaming archive formats
libavcodec            libavcodec - FFmpeg codec library
libavdevice           libavdevice - FFmpeg device handling library
libavfilter           libavfilter - FFmpeg audio/video filtering library
libavformat           libavformat - FFmpeg container format library
libavutil             libavutil - FFmpeg utility library
libcares              c-ares - asynchronous DNS lookup library
libcrypto             OpenSSL-libcrypto - OpenSSL cryptography library
libcurl               libcurl - Library to transfer files with ftp, http, etc.
libdvdcss             libdvdcss - DVD access and decryption library.
libexslt              libexslt - EXSLT Extension library
libffi                libffi - Library supporting Foreign Function Interfaces
liblzma               liblzma - General purpose data compression library
libmpeg2              libmpeg2 - MPEG-1 and MPEG-2 stream decoding library
libmpeg2convert       libmpeg2convert - Image conversion library helper for libmpeg2
libpcre               libpcre - PCRE - Perl compatible regular expressions C library with 8 bit character support
libpcre16             libpcre16 - PCRE - Perl compatible regular expressions C library with 16 bit character support
libpcre32             libpcre32 - PCRE - Perl compatible regular expressions C library with 32 bit character support
libpcrecpp            libpcrecpp - PCRECPP - C++ wrapper for PCRE
libpcreposix          libpcreposix - PCREPosix - Posix compatible interface to libpcre
libpng                libpng - Loads and saves PNG files
libpng14              libpng - Loads and saves PNG files
libpostproc           libpostproc - FFmpeg postprocessing library
libsoup-2.4           libsoup - a glib-based HTTP library
libsoup-gnome-2.4     libsoup - a glib-based HTTP library
libssl                OpenSSL - Secure Sockets Layer and cryptography libraries
libswresample         libswresample - FFmpeg audio resampling library
libswscale            libswscale - FFmpeg image rescaling library
libtasn1              libtasn1 - Library for ASN.1 and DER manipulation
libtiff-4             libtiff - Tag Image File Format (TIFF) library.
libxml-2.0            libXML - libXML library version2.
libxslt               libxslt - XSLT library version 2.
lua                   Lua - An Extensible Extension Language
mad                   MAD - libmad library
nettle                Nettle - Nettle low-level cryptographic library (symmetric algorithms)
ogg                   ogg - ogg is a library for manipulating ogg bitstreams
openssl               OpenSSL - Secure Sockets Layer and cryptography libraries and tools
opus                  Opus - Opus IETF audio codec (floating-point build)
pango                 Pango - Internationalized text handling
pangocairo            Pango Cairo - Cairo rendering support for Pango
pangowin32            Pango Win32 - Win32 GDI font support for Pango
pixman-1              Pixman - The pixman library (version 1)
Qt                    Qt - Qt Configuration
Qt5AxBase             Qt5 AxBase - Qt AxBase module
Qt5AxContainer        Qt5 AxContainer - Qt AxContainer module
Qt5AxServer           Qt5 AxServer - Qt AxServer module
Qt5Bluetooth          Qt5 Bluetooth - Qt Bluetooth module
Qt5Bootstrap          Qt5 Bootstrap - Qt Bootstrap module
Qt5CLucene            Qt5 CLucene - Qt CLucene module
Qt5Concurrent         Qt5 Concurrent - Qt Concurrent module
Qt5Core               Qt5 Core - Qt Core module
Qt5DBus               Qt5 DBus - Qt DBus module
Qt5Declarative        Qt5 Declarative - Qt Declarative module
Qt5Gui                Qt5 Gui - Qt Gui module
Qt5Help               Qt5 Help - Qt Help module
Qt5Multimedia         Qt5 Multimedia - Qt Multimedia module
Qt5MultimediaQuick_p  Qt5 MultimediaQuick_p - Qt MultimediaQuick_p module
Qt5MultimediaWidgets  Qt5 MultimediaWidgets - Qt MultimediaWidgets module
Qt5Network            Qt5 Network - Qt Network module
Qt5Nfc                Qt5 Nfc - Qt Nfc module
Qt5OpenGL             Qt5 OpenGL - Qt OpenGL module
Qt5OpenGLExtensions   Qt5 OpenGLExtensions - Qt OpenGLExtensions module
Qt5PlatformSupport    Qt5 PlatformSupport - Qt PlatformSupport module
Qt5Positioning        Qt5 Positioning - Qt Positioning module
Qt5PrintSupport       Qt5 PrintSupport - Qt PrintSupport module
Qt5Qml                Qt5 Qml - Qt Qml module
Qt5QmlDevTools        Qt5 QmlDevTools - Qt QmlDevTools module
Qt5Quick              Qt5 Quick - Qt Quick module
Qt5QuickParticles     Qt5 QuickParticles - Qt QuickParticles module
Qt5QuickTest          Qt5 QuickTest - Qt QuickTest module
Qt5QuickWidgets       Qt5 QuickWidgets - Qt QuickWidgets module
Qt5Script             Qt5 Script - Qt Script module
Qt5ScriptTools        Qt5 ScriptTools - Qt ScriptTools module
Qt5Sensors            Qt5 Sensors - Qt Sensors module
Qt5SerialPort         Qt5 SerialPort - Qt SerialPort module
Qt5Sql                Qt5 Sql - Qt Sql module
Qt5Svg                Qt5 Svg - Qt Svg module
Qt5Test               Qt5 Test - Qt Test module
Qt5UiTools            Qt5 UiTools - Qt UiTools module
Qt5WebSockets         Qt5 WebSockets - Qt WebSockets module
Qt5Widgets            Qt5 Widgets - Qt Widgets module
Qt5WinExtras          Qt5 WinExtras - Qt WinExtras module
Qt5Xml                Qt5 Xml - Qt Xml module
Qt5XmlPatterns        Qt5 XmlPatterns - Qt XmlPatterns module
sdl2                  sdl2 - Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.
sigc++-2.0            libsigc++ - Typesafe signal and callback system for C++
sndfile               sndfile - A library for reading and writing audio files
sox                   SoX - Audio file format and effects library
sqlite3               SQLite - SQL database engine
theora                theora - Theora video codec
theoradec             theora - Theora video codec (decoder)
theoraenc             theora - Theora video codec (encoder)
vorbis                vorbis - vorbis is the primary Ogg Vorbis library
vorbisenc             vorbisenc - vorbisenc is a library that provides a convenient API for setting up an encoding environment using libvorbis
vorbisfile            vorbisfile - vorbisfile is a library that provides a convenient high-level API for decoding and basic manipulation of all Vorbis I audio streams
x264                  x264 - H.264 (MPEG4 AVC) encoder library
zlib                  zlib - zlib compression library

Достойный набор библиотек, практически на все случаи жизни :-)

Установка IDE

В качестве IDE выбрал CodeBlocks, хотя можно например и QtCreator. CodeBlocks так CodeBlocks - читаем тут http://www.codeblocks.org/ скачиваем отсюда http://www.codeblocks.org/downloads/26 выбирая вариант без встроенного MinGW (потому что он уже поставлен)

Запускаем..оупс - автоматически ненашёлся компилятор :-(

Задаём его вручную - Settings/Compiler во вкладке ToolChain Executables ставим

  • Compiler Installation Directory - C:\MinGW (у меня он так и был)
  • В прочих Program Files - удаляем ненужный префикс «mingw32-» у всех программ (в нашем тулчейне оригинальные имена)

Собственно всё…