Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2012, 20:16   #1
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию variadic templates и компиляторы

К моему великому сожалению, сия няшка не поддерживается компиляторами корпорации Зла.

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

Но акромя студии родной, других инструментов не разумею абсолютно.

В связи с чем два вопроса:
1. Какая есть ИДЕ, которая по удобствам сопоставима со студией, но при этом в поставке идет компилятор, поддерживающий новый стандарт ?
Не обязательно целиком, но variadic templates должны поддерживаться обязательно. Продукты под Windows.

2. Я совершенно не ориентируюсь в компиляторах, и понятия не имею как происходит процесс обработки сходных файлов вне ИДЕ.
Теперь я хочу ликвидировать этот досадный пробел в образовании.

Имеется следующий код:
(мопед не мой)
Код:
#include <iostream>
#include <conio.h>

template< class Val >
class SwithClass{
public:
    SwithClass( const Val & v ):val(v){}

    void operator() (){}

    template < class E, class F, class ... Args >
    void operator() ( E e, F f, Args ... args ){
        if( e==val )
            f(); else
            (*this)( args... );

    }
private:
    Val val;
};

template< class Val >
SwithClass<Val> Swith( const Val& v ){
    return SwithClass<Val>(v);
}

int main()
{
    int x = 8;

    Swith( x )
        ( 1,
        [](){
            std::cout <<"x=1" << std::endl;
    },

        8,
        [](){
            std::cout <<"x=8" << std::endl;
    } );
    getch();    
    return 0;
}
Скачал себе mingw
Там туева куча папок, и ничерта не понять.
Каким образом выше представленный код можно скомпилировать вне ИДЕ?
Что для этого нужно?

Можете просто показать пошаговый пример процесса?
_Bers вне форума Ответить с цитированием
Старый 12.02.2012, 08:46   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

думаю в сторону qt creator. Как IDE вещь достойная. Однако в чистом виде не компилирует (спотыкается так же, как и студия).

Скачал mingw-4.6.2+boost-1.48.0. Скомпилировал - все работает отлично.
Вопрос: каким образом можно подружить QtCreator с новым mingw?
Добавил новый компиль, но вот как выбрать для самого приложения, что хочу компилить именно им - так и не вразумел...
_Bers вне форума Ответить с цитированием
Старый 12.02.2012, 14:47   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Сделал.

В общем, если кому интересно:

1. Для цивилизованной работы под форточками понадобятся следующие вещи:
... библиотека Qt_SDK_Win
... сам QtCreator
... заплатка jom

2. В коробке идёт устаревшая версия компилятора, поэтому я обзавелся mingw-4.6.2+boost-1.48.0

3. Сначала установил mingw, затем QtCreator, затем SDK.
4. При установке SDK нужно выбирать кастомную, а не стандартную. Потому что со стандартной mingw не устанавливается, и его не получится потом поюзать.

5. После всех манипуляций будут проблемы с отображением русских букв в консоле вывода (там, где ошибки компиляторы высвечиваются).
6. Распаковываем jom, и копируем его поверх оригинального прям в папку, где установлен QtCreator. После чего баг будет устранен.

7. В настройках -> сборка и запуск -> инструменты -> добавляем наш компилятор mingw

8. В свойствах проекта выбираем его.

9. В файле *.pro в самом низу нужно дописать следующий текст: QMAKE_CXXFLAGS += -std=c++0x

10. Теперь QtCreator умеет понимать фичи из нового стандарта.
11. Профит!

Единственное, что меня пока расстраивает - почему то mingw компилировать можно только дебаг версию. А релиз - майкрософтскими компилями. В чем трудность пока ещё не разобрался...

Если кто знает, подскажите.
_Bers вне форума Ответить с цитированием
Старый 18.01.2013, 06:13   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Настройка QtCreator 2.6.1

Вот здесь можно скачать готовый SDK ещё от нокии:
http://rus-media.org/viewtopic.php?f=997&t=141853

Но он нам не нужен, мы хотим использовать что нибудь более новое.

Итак, поехали:

1. Закачиваем библиотеки:
http://qt-project.org/downloads

Там сейчас есть 5-я версия. Она не дружит ни с mingw, ни с 12 компилятором от студии.

Устанавливайте 4.8.4.
Я установил библиотеки для mingw и для 2008 и 2110 студий.

2. При установке библиотек для mingw может выдать ошибку: не нашел какую то хрень для виндовс. Забиваем болт, и кликаем "установить"

3. Скачиваем QtCreator 2.6.1

4. Инструменты --> параметры --> сборка и запуск --> компиляторы
Убеждаемся, что креатор подхватил все компиляторы

5. Переходим в вкладку Инструменты --> параметры --> сборка и запуск --> профили.

6. Тыкаем "добавить" и указываем пути к нашим библиотекам. Пример пути:
C:\Qt\vs2110_4.8.4\bin

7. Делаем "применить"

8. Переходим в вкладку Инструменты --> параметры --> сборка и запуск --> инструментарии.

9. Тыкаем "добавить", далее вписываем название инструмента, выбираем компилятор, и профиль

10. Вуаля
_Bers вне форума Ответить с цитированием
Старый 18.01.2013, 09:55   #5
Suby
Пользователь
 
Аватар для Suby
 
Регистрация: 03.11.2012
Сообщений: 89
По умолчанию

Добавлю свои пять копеек на счет Qt...
Скомпилированные .ехе файлы не будут запускаться статически без Qt библиотек. Чтобы отучить ехешники от библ, нужно проделать следующее:
Код:
Сборка статической Qt (MinGW) под винду, с поддержкой OpenSSL:

1. Скачать и установить OpenSSL (Win32OpenSSL-1_0_1c)
2. Скачать и установить QtSDK (для примера в папку C:\QtSDK)
3. Скачать исходники Qt qt-everywhere-opensource-src-4.8.4 и распаковать их в папку (заменить имеющиеся там исходники 
от установки): C:\QtSDK\QtSources\4.8.4\ (перед копированием нужно создать там папку "4.8.4")
4. Скопировать:
Файлы:
C:\OpenSSL-Win32\lib\libeay32.lib 
C:\OpenSSL-Win32\lib\ssleay32.lib 
в папку:
C:\QtSDK\QtSources\4.8.4\lib\
Файлы:
C:\OpenSSL-Win32\lib\MinGW\libeay32.a
C:\OpenSSL-Win32\lib\MinGW\libeay32.def
C:\OpenSSL-Win32\lib\MinGW\ssleay32.a
C:\OpenSSL-Win32\lib\MinGW\ssleay32.def
в папку:
C:\QtSDK\Desktop\Qt\4.8.4\mingw\lib\
Папку:
C:\OpenSSL-Win32\include\
в папку:
C:\QtSDK\QtSources\4.8.4\include
т.е. папка C:\QtSDK\QtSources\4.8.4\include должна будет содержать в себе подпапку C:\QtSDK\QtSources\4.8.4\include\openssl
5. Открыть блокнотом файл:
C:\QtSDK\QtSources\4.8.4\mkspecs\win32-g++\qmake.conf
найти строку, содержащую: QMAKE_LFLAGS
удалить ее полностью, и вместо нее вставить:
QMAKE_LFLAGS = -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
и сохранить файл.
6. Запустить консоль Qt из «Пуск»>«Программы»>«QtSDK»>«Desktop»>«Qt 4.7.4 for Desktop (MinGW)»
В консоли перейти в папку: C:\QtSDK\QtSources\4.8.4\ с помощью команд:
«C:» (без кавычек, нажать Enter)
«cd C:\QtSDK\QtSources\4.8.4\» (без кавычек, нажать Enter)
7. Сконфигурировать исходники Qt командой:
configure -static -debug-and-release -no-exceptions -openssl-linked -nomake demos -nomake examples
Ответить на вопросы по лицензии (лицензия OpenSource)
8. Дождаться конца конфигурирования и собрать библиотеку командой (в той же открытой консоли):
mingw32-make sub-src
и дождаться окончания сборки (сборка будет идти примерно пол часа, в зависимости от мощей компа), после чего консоль можно закрывать. 
9. Запустить QtCreator, зайти в меню:
«Инструменты» > «Параметры» и в левом меню выбрать пункт Qt4 
Кнопкой «Добавить» - добавить созданную статическую сборку, т. е. указать в открывшемся окне файл: C:\QtSDK\QtSources\4.8.4\bin\qmake.exe
и дать ей свое имя (к примеру «Qt 4.8.4 for Desktop - MinGW 4.4 (Static)»)
Раскрыть область «Подробнее» и нажать кнопку «Собрать все»
Открыть проект, зайти в его свойства (слева меню «Проекты») и добавить новую конфигурацию сборки с новым именем.
Выбрать тип сборки Релиз (из Релиз или Дебаг)
Можно собирать проекты.
Теперь ехешники будут намного больше весить, но зато их можно будет запускать на любой системе (в данном случае на любой Винде) без библиотек Qt.

P.S.: Мануал не мой, стырил с какого-то форума, но переделал его маленько на свой лад, ибо исходный ман был старый и не актуальный.
Suby вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
fun with C++ templates pproger Общие вопросы по программированию, компьютерный форум 3 12.01.2011 20:26
MSVS templates coinkrsk Общие вопросы C/C++ 2 30.09.2010 09:51
Компиляторы miscreant Помощь студентам 2 21.08.2010 06:37
Компиляторы SunKnight Софт 3 25.01.2008 17:03