ѢѢ или трудности перевода. Обучаем QtCreator великому и могучему

Однажды тёмной-тёмной ночью, один обычный человек в n+1 раз устанавливал Qt. Всё было хорошо, но хорошо было недолго, ибо случилось страшное и тестовый проект не собрался, и написал ему QtCreator страшные слова:
C:\Qt\5.5\Projects\bcpl\main.cpp:10: ошибка: C2065: bug: Ґ®Ўкпў«Ґл© Ё¤ҐвЁдЁЄ в®а
Данный эпос для тех, у кого это… А это возникает у тех, кто вместо MinGW использует MSVC. Иными словами, если вы сначала поставили Visual Studio (причём русскую студию), а затем Qt, то оно скорее всего будет… В сети довольно много рецептов и советов по лечению проблемы, начиная от радикальных выкриков типа
нужно снести Qt, снести VS, а потом всё переустановить в обратном порядке
до страшных батников типа
@echo off reg add «HKCU\Software\Microsoft\Command Processor» /v AutoRun /t reg_expand_sz /d «chcp 1251 1>nul» /f C:\Qt\qtcreator-{version}\bin\qtcreator.exe reg delete «HKCU\Software\Microsoft\Command Processor» /v AutoRun /f
Также есть предложения не использовать компилятор VS (Докачать, если сразу не скачали, и подружить MinGW с Qt предлагается в виде очередного квеста с гуглением и курением мануалов). Здесь предлагают использовать другой батник или пересобрать jom из исходников. Вариантов масса, но мы пойдём самым быстрым путём.
Здесь описана сама суть бага (разница в кодировках) и здесь же есть файлик jom.zip. Скачиваем его, распаковываем в папку, где лежит QtCreator (у меня это C:\Qt\Tools\QtCreator\bin), соглашаемся с заменой. Далее в самом QtCreator идём в Параметры -> Инструменты и проверяем, чтобы стояла галочка «Использовать jom вместо nmake»
Иногда может потребоваться перезапуск QtCreator, иногда к экзешнику нужно будет добавить файл QtCore4.dll.
Решение работает на Windows 7, 8 и 8.1, а вот у пользователей Windows 10 жизнь будет сложнее…
… или только мне так повезло… Но если вы со мной в одной лодке (Специально насилую мозг Windows 10 + VS 2015), то продолжим! Итак, для начала идём сюда. Качаем рабочий бинарник и заново меняем его в папке bin (или убираем галку и будем использовать nmake). Далее качаем исходный код Jom’а:
1 |
git clone git://code.qt.io/qt-labs/jom.git |
Открываем jom.pro QtCreator’ом, нажимаем Ctrl+r и молимся, чтобы всё собралось. Если вам повезло и открылась командная строка с текстом типа «бла-бла-бла, не найден Makefile», то переходите сразу ниже, туда, где будет код, наслаждения вы не получите 😛
Если же собрать jom не получится, то а) моё решение проблемы (не оптимальное, зато моё!), б) в конце статьи я дам ссылку на работающий jom.exe.
А) У меня проблема возникла в строке #include <Tlhelp32.h>
— никак QtCreator не хотел видеть его. Моё решение не блещет изяществом, скорее это всё равно, что стрелять из пушки по воробьям, но я сделал так (тем более, что мне повезло и не пришлось ничего ставить дополнительно). Открываем Visual Studio и если нет, то ставим Windows 8 SDK и QtPackage. Перезагружаем VS и открываем файл jom.pro в VS. После мучительного раздумья проект загрузится. В обозревателе решений появятся три проекта — jom, jomlib и tests. Для начала в режиме Debug нужно последовательно собрать сначала jomlib, затем jom (двойной клик по проекту, затем клик правой кнопкой мыша, «Собрать»). Если всё ОК (у меня было так, если у вас что-то другое, то нужно разбираться в чём именно проблема…), то переключайте на Release, собирайте jomlib, затем в проекте jom открывайте файл main.cpp, находите функцию main (последняя) и перед самой первой строчкой int result = 0
пишете:
1 2 3 |
SetConsoleCP(1251); SetConsoleOutputCP(1251); int result = 0; // Эта строчка из оригинального jom! |
Собираете проект jom, переходите в папку, где он лежит, копируете jom.exe сами знаете куда, запускаете QtCreator и наслаждаетесь языком Пушкина и Есенина…
Метод не оптимален. Повторюсь, у меня в VS уже стояло всё, что нужно, поэтому я поступил так. Если же вам лень или что-то не получилось, то вот здесь лежит скомпилированный jom. Специально пересобрал и ещё раз оттестировал. Просто добавьте его в папку c QtCreator!
Всем мира и послушного Qt!
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: