Пару слов о том для чего это понадобилось вообще: у меня была простая ситуация — не было быстрого интернета и был компьютер с начисто установленной windows 10. К тому же проект, который ковыряю, требует сборки как под 32 так и под 64 битную архитектуру, поэтому мне показалось что наличие Qt, одинаково сконфигуренного и скомпилированного под эти архитектуры будет только плюсом.
0) Желательно заранее отрубить службы Windows Search и Superfetch и защитник винды. Они на наших операциях будут только тормозить систему, а ресурсы нам скоро понадобятся. Кроме того очень полезно сделать языком ввода по умолчанию английский.
1) Создаем папку «C:QT» — тут будут жить наши сборки.
2) Для начала нам конечно же понадобится сам компилятор mingw-w64. Качаем инсталлер тут.
3) Устанавливаем по очереди обе версии:
первая установка:
Version — 5.2.0 — последняя на момент написания статьи;
Architecture — i686 — сначала ставим 32 битную версию (пускай вас не пугает что оно не i386, i686 это Интел пентиум про и выше, сумеете запустить 2k винду на чем то более древнем — удачи!)
Собираем Windows Terminal из исходников
Threads — win32 — если не портируете исходники с юниксов лучше выбрать нативные;
Exeption — sjlj — мне нужно так, если вам нужны другие — бога ради;
Build revision — 1 опять же последняя на момент написания статьи;
Назначение выбрал «C:mingw-w64-i686» ибо из Program Files могут быть проблемы с пробелами в путях у qt.
Вторая установка все то же самое кроме:
Architecture — x86_64;
Путь «C:mingw-w64-x86_64»;
Я так же убрал галку «создать ярлыки», иначе они перезапишутся 64 битной версией, мне это неудобно.
Если не хотите плодить много папок в корне ставить можно в «C:QTmingw-w64-i686» и «C:QTmingw-w64-x86_64» соответвенно архитектурам, роли это не играет.
4) Качаем исходники бибилиотеки QT 4.8.7 тут
5) Распаковываем сам Qt (тут лучше заранее озаботится наличием программы 7zip ибо виндовый архиватор сначала будет распаковывать во временную папку, потом копировать из нее туеву хучу мелких файлов, идиот, а потом ещё и создаст дополнительную папку внутри с тем же именем) сразу в 2 копии «C:QTqt-4.8.7-mingw-w64-i686» и «C:QTqt-4.8.7-mingw-w64-x64» (вторая нужна на случай ошибок при конфигуре, гораздо быстрее переименовать копию и пустить фоном распаковываться ещё одну, чем ждать пока отработает mingw32-make confclean). Если не уверены в архиваторе проверяем чтобы в этих папках сразу были папки bin, util, src и т.д., если архиватор создал ещё одну вложенную — вытаскиваем содержимое на уровень выше.
6) Идем в свойства системы и меняем переменную PATH (надо же в моей 10-ке сделали нормальный интерфейс для этого) добавляем туда путь пока только к 32 битной версии компилятора, у меня это: «C:mingw-w64-i686mingw32bin». Если вдруг у вас в PATH есть пути к другим компиляторам временно убираем их оттуда.
7) Запускаем cmd от админа (это важно) и вводим:
5 причин научиться собирать софт из исходников
должна появится инфа о компиляторе, если этого не произошло значит компиль установлен неправильно, ищем ошибку на предыдущих шагах. Если вывелась информация проверяем, что мы ничего не напутали: у нас запускается действительно 32 битная версия, и что она именно та которую мы установили на предыдущих шагах, а не из оригинального mingw без w64 (это по сути разные проекты) или, прости господи, вижуал студии.
Если все нормально переходим в папку с Qt:
запускаем там конфигур как-то так:
.configure -debug-and-release -opensource -confirm-license -platform win32-g++ -graphicssystem raster -no-openssl -nis -iconv -system-proxies -no-freetype -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -qt-style-windowsce -qt-style-windowsmobile -qt-style-s60
в этом конфиге по максимому все что можно собрать без зависимостей. Мне openssl не очень нужен, иначе его нужно собрать заранее. Если критично время можно отключить примеры, не собирать дополнительные темы и odbc плагин. Справку по опциям можно получить так: «.configure -help». Далее ждем несколько минут пока отработает конфигур, и запускаем компиляцию:
у меня 4 ядерный процессор по этому опция -j4 она обозначает делать компиляцию в 4 потока. Сразу оговорюсь, компиляция с этой опцией до конца не проходит, грохается на qtdeclarative с ошибкой копирования файла, видимо где то неправильно прописаны зависимости. Мне достаточно было запустить компиляцию после сбоя ещё раз. Ошибка кстати повторилась и на 64 битной версии. На core i5-3570 c 8-ю гигами оперы компиляция одной версии в 4 потока занимает почти 2 часа.
8) Если у вас медленный интернет, пока компилится сам Qt можно поставить на закачку qt creator 3.2.2 (это последняя версия, которая компилится на 4.8.x), ActivePerl-5.20.2 !32 битную версию! и msysgit !32 битную версию! Указанные тут верcии это последние на момент написания статьи, и, соответственно, те с которыми работал я. Если у вас что-то не пошло на более новых, попробуйте указанные мной. Предупрежу сразу, до сборки qtcreator ставить msysgit очень не желательно, креатор нормально не соберется если увидит в патче sh.exe, а для нормальной работы с гитом его как раз стоит ставить с прописыванием PATH.
9) Устанавливаем perl: я не ставил документацию и примеры, местом назначения сделал «C:perlx86». Галку «Add perl to the PATH environment variable» не снимаем. После установки в командной строке (естественно не в той, в которой компилится Qt) пишем «perl -v», должна появится информация о версии.
10) Распаковываем qt creator в » C:QTqt-creator-opensource-src-3.2.2″, так же проверяем чтобы внутри не было вложенной папки, а сразу были папка bin и остальное.
11) Ждем когда компилируется qt. Никаких прямых сообщений что компиляция завершена успешно, не будет. У меня последним собрался ‘C:/QT/qt-4.8.7-mingw-w64-i586/demos/declarative/webbrowser’. Можно запустить qtdemo.exe для проверки, позапускать примеры. Снова открываем редактор переменных среды, дописываем в PATH «C:QTqt-4.8.7-mingw-w64-i586bin».
Опять же убеждаемся, что это единственный профиль qt в PATH. Проверяем себя, перезапустив командную строку и набрав «qmake -v».
12) Открываем блокном файл «C:QTqt-creator-opensource-src-3.2.2srclibsutilstcpportsgatherer.cpp», находим строчку
#if __GNUC__ == 4 (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 2)
и меняем её на
#if __MINGW64_VERSION_MAJOR == 5 || (__GNUC__ == 4 (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 2))
13) Перезапускаем cmd опять же от админа. Собираем creator в новой папке:
mkdir C:QTqt-creator-3.2.2-x86
cd C:QTqt-creator-3.2.2-x86
qmake -r ../qt-creator-opensource-src-3.2.2/qtcreator.pro
mingw32-make release -j4
надеюсь, повторяться про опцию -j4 не надо.
14) Ждем окончания компиляции, запускаем qtcreator, убеждаемся что работает. Закрываем, настраивать в нем пока ещё нечего. Если очень жалко места на диске и оперативы, можно уже скомпиленный creator закинуть в папку с Qt (скопировать только папки bin, lib, share) и добросить в папку bin недостающие dll-ки из mingw. По человечески же, надо наоборот: убрать компилятор и Qt из PATH и докопировать в папку bin creator-а dll-ки из папок bin от Qt и компилятора.
15) Снова открываем редактор PATH убираем оттуда путь к скомпиленному Qt «C:QTqt-4.8.7-mingw-w64-i586bin» и меняем путь к компилятору c «C:mingw-w64-i686mingw32bin» на «C:mingw-w64-x86_64mingw64bin». Опять же перезапускаем cmd от админа и проверяем что нам выдаст
если все в норме, делаем все то же самое что и в шаге 6, только путь у нас теперь будет другой.
cd C:QTqt-4.8.7-mingw-w64-x86_64
.configure -debug-and-release -opensource -confirm-license -platform win32-g++ -graphicssystem raster -no-openssl -nis -iconv -system-proxies -no-freetype -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -qt-style-windowsce -qt-style-windowsmobile -qt-style-s60
mingw32-make -j4
16) Теперь, пока компилится 64 битная версия Qt, можно заняться и гитом (джитом, не знаю какая транскрипция правильнее). Устанавливаем msysgit v2.6.3 !32 битную версию! запускаем инсталлер сразу от админа, иначе он поставит нам версию только для локального пользователя, оно нам не надо. Путь я выбрал «C:msysGitX86». На следующем шаге можно ткнуть галку, которая создаст ярлык к консоли на рабочем столе. Eщё через шаг выбираем «Use git from the Windows Command Promt», Я еще выбрал «Use Windows` default console window» для терминала, остальное на любителя или по умолчанию.
На blogspot есть замечательная статья о том как подружить qt creator и github. Однако в ней не даны инструкции что делать если винт на котором все это настроено сгорел синим пламенем. Попробуем восполнить этот пробел.
17) Запускаем git-bash от админа, с ярлыка который нам создал установщик
делаем настройки, конечно же подставив ту почту на которую зарегистрирован аккаунт на гитхабе и свой никнейм
генерим новую пару ключей для ssh:
3 раза жмакаем enter, заходим браузером в свой профиль на гитхабе, удаляем старый ключ (если конечно не собираемся им пользоваться, а он утрачен как у меня) и добавляем новый.
пробуем склонировать существующий репозиторий:
обратите внимание что пользователь «git», а не никнейм; никнейм указывается уже после двоеточия. Кроме того никаких https:// или git:// перед адресом быть не должно, если получаете сообщение, что нужно использовать https, значит гитхаб не опознал в вас владельца репозитория, ищите проблемы с ключами или ssh. Если все в порядке, гит сделает нам копию репозитория в папке mysuperproject. Зайдем в нее и проверим что репозиторий рабочий, и у нас есть все права
cd ./mysuperproject
git remote -v
touch .testfile.txt
git add .testfile.txt
git commit -m test
git push
git reset —hard HEAD~1
git push -f
естественно ошибок быть не должно, если есть значит что-то не так с установкой гита или ssh.
18) Дожидаемся пока скомпилится 64 битная версия Qt. Убираем из PATH 64 битный компилятор, либо совсем, либо меняем на 32 битную версию, это уже как удобнее. Открываем блокнотом «C:QTqt-4.8.7-mingw-w64-x86_64mkspecswin32-g++qmake.conf», сразу после комментов дописываем «QMAKE_TARGET.arch += x86_64», сохраняем, закрываем.
19) Снова запускаем creator (если сейчас он перестал запускаться, значит что-то лишнее есть в path или не все библиотеки мы ему подложили).
Открываем Инструменты(Tools)->Параметры(Options). Сразу же в разделе Среда(Environment) на вкладке Основные(General) нас просят ввести путь к командe patch, можно использовать «C:msysGitX86usrbinpatch.exe». Идём во Внешние утилиты(External Tools) — правим пути.
Переходим в раздел Сборка и запуск(Build MinGW, если нет определенных в path имя даем «MinGW32-W64» и путь «C:mingw-w64-i686mingw32bing++.exe» (можно и копию сделать для удобства, не страшно). Добавляем ещё один: имя «MinGW64-W64» путь «C:mingw-w64-x86_64mingw64bing++.exe», ABI выбираем 64битные, если есть.
Переходим на вкладку Профили Qt (Qt versions), Если 32 битного профиля нет в path добавляем сначала его «C:QTqt-4.8.7-mingw-w64-i586binqmake.exe». Потом добавляем 64 битный «C:QTqt-4.8.7-mingw-w64-x86_64binqmake.exe». Имена у меня «Qt 4.8.7 mingw-w64 i586» и «Qt 4.8.7 mingw-w64 x86_64» соответвенно.
Переходим на вкладку Комплекты(kits), сначала настраиваем профиль Desktop:
Название:Desktop
Имя в файловой системе: x86
Тип устройства:Desktop
Устройство: Локальный ПК
Sysroot: — оставляем пустым
Компилятор: MinGW32-W64
Отладчик: mingw32-w64-gdb
Профиль Qt: Qt 4.8.7 mingw-w64 i586
Добавляем ещё один
Название:Desktop 64
Имя в файловой системе: x86_64
Тип устройства:Desktop
Устройство: Локальный ПК
Sysroot: — оставляем пустым
Компилятор: MinGW64-W64
Отладчик: mingw64-w64-gdb
Профиль Qt: Qt 4.8.7 mingw-w64 ч86_64
сохраняем, применяем, пробуем что-нибудь собрать.
Вот пожалуй и все что вспомнил по данной теме.
Кстати небольшой хак: если нужно незначительно переконфигурить уже собранную сборку, ну например openssl вы решили добавить или плагин к какому-нить мускулю не собрался, а 2-3-4 часа ждать пока все перекомпилиться ни разу не улыбается, делаем так: выставляем системное время на минут 10-15 раньше чем последний раз конфигурили сборку, переконфигуриваем, возвращаем время на настоящее. Блокнотом изменяем тот(те) мейкфайл(ы) который(е) затрагивает(ют) наши изменения и запускаем мейк, если не ошиблись с мейкфайлами (на самом деле если знать из чего состоит Qt, и что от чего зависит, ошибится трудно) перекомпилится только тот кусок который нам нужен.
Источник: habr.com
Кросс-платформенная сборка с GitHub Actions
Если проект живет на GitHub, можно за десять минут настроить авто-сборку под основные операционные системы — Windows, Linux и macOS.
Раньше для сборки почти всегда использовали Travis CI, многие по инерции и сейчас так делают. Но есть способ лучше — GitHub Actions.
GitHub Actions — невероятно мощный бесплатный сервис автоматизации любых задач. Грубо говоря, вы выполняете свой код на серверах Гитхаба и делаете там все, что заблагорассудится. Звучит диковато, но открывает бездну возможностей. В том числе — автоматическую сборку проекта под все ОС. Особенно приятно, что можно собирать под Windows.
Вот как это работает:
- Создаете файл конфигурации.
mkdir -p .github/workflows touch .github/workflows/build.yml
- Указываете условия запуска сборки.
Например, собирать при каждом коммите:
on: push
Или только из новых тегов:
on: push: tags: — «*»
- Перечисляете операционные системы.
runs-on: $> strategy: matrix: include: — os: ubuntu-latest — os: windows-latest — os: macos-latest
- Указываете шаги сборки.
Действие actions/checkout скачивает исходники, а на остальных шагах выполняются те команды, что указаны по тексту. В примере это сборка исходного кода на C с помощью gcc , но у вашего проекта может быть npm run для JS или tox для Python — то, что обычно используете для сборки.
Если для вашего языка есть стандартный репозиторий пакетов вроде npm или pypi — здесь же можно опубликовать сборку. Если репозитория нет, можно опубликовать прямо на гитхабе с помощью действия svenstaro/upload-release-action :
- Полный пример конфигурации
- Коммитите изменения, пушите и наблюдаете результат на вкладке Actions репозитория на Гитхабе.
Готово! Теперь Гитхаб трудится, а вы отдыхаете.
- Документация по GitHub Actions
- Как сделать все что угодно вообще с GitHub Actions
Подписывайтесь на канал, чтобы не пропустить новые заметки
Источник: antonz.ru
Сборка небольшого проекта из GitHub
Доброго времени суток. Собираю проект https://github.com/leonahi/stream_cipher_a5_1 в Qt(проект без Qt, C++, MinGw 32bit)
Создаю проект c qMake, main.cpp не заменяю
Добавляю все файлы из папки
Компилирую
Срабатывает условие :
/* * * Read plain text from binary file — argv[1] * */ if(argc != 2)
Ккак мне нужно выполнить чтение из файла если с проектом прилагается test_file_binary.txt?
Отслеживать
задан 18 апр 2018 в 20:29
31 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
передать его в аргументах командной строки, очевидно.
18 апр 2018 в 21:06
В смысле это как?
19 апр 2018 в 6:35
Допустим у вас скомпилировался проект и получился бинарник a.exe, вам нужно запустить его из командной строки командой: «a.exe test_file_binary.txt», тогда программе передастсе имя файла и всё будет работать.
19 апр 2018 в 6:37
19 апр 2018 в 8:17
19 апр 2018 в 9:13
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
В общем решил попробовать «собрать» ваш пример. Работаю тоже в «Qt» :3.
Разобью на действия :
1. Скачал проект
2. Разархивировал проект
3. В той же директории создал проект на С++ (вторая картинка)
4. После чего добавил в проект все файлы кроме Makefile файла. Я так и не понял в чём именно был собран скачанный проект и не стал заворачиваться с ним
5. Также заменил файл main.cpp на разархивированный из проекта.Можно также просто скопировать вставить с заменой всего содержимого.
6. Воаля всё собирается :3
7. Также желательно в ту папку в которой лежит собранный проект (в винде .exe, в линуксе ?? ) положить тестовые текстовые файлы (.txt)
8. В винде : После чего можно зайти в командную строку (cmd) и зайти в папку в которой собран проект (через cmd разумеется) и ввести
команду exper.exe test_file_binary.txt
В линуксе всё печальней 🙁
Выполняем все действия до 7 пункта. После чего сталкиваемся что исполнительного файла как такового полностью нету. В винде .exe файл при «запуске» сразу говорит каких файлов тебе не хватает после чего, ты просто копируешь их из папки где лежит компилятор в директорию собранного проекта. В линуксе надо устанавливать linuxdeployqt ( sudo apt-get install libqt5webkit5-dev ) после чего выполнять команду подтягивающую библиотеки, но увы у меня не вышло (третья картинка), притом что у меня linuxdeployqt установился.
Я пошёл другим путем, просто «загрубил» программу и закоментировал все вызовы argv[1] заменив их созданным буфером с названием файла(который лежит в директории программы ) char ess[256] = «test_file_binary.txt»;
// ifstream file(argv[1]); ifstream file(ess);
Ну и вот картинка с результатом.

Создаю проект.
Ошибка 🙁 
Источник: ru.stackoverflow.com