Qt условная компиляция windows linux

Кросс-компиляция Qt в России

Как Вы возможно знаете на территории РФ более недоступен Qt. Также в этот момент мне потребовалось реализовать кросс-компиляцию своего проекта под разные ОС. В ходе реализации кросс-компиляции обнаружилось, что можно совершенно легально использовать Qt, да еще и реализовать кросс-компиляцию.

Windows 11

Используя метод проб и ошибок выяснилось, что наиболее хорошо подходит для данных целей Windows 11, т.к. под него есть X Server, причем абсолютно бесплатный. Также не может не радовать скорость работы WSL2 под данной ОС. Итак, не буду томить — переходим к реализации.

Установка WSL2 + X Server

Сразу оговорюсь, речь идет про системы на x64 архитектуре (Intel/AMD). На ARM тоже можно, но работоспособность не гарантируется.

Сперва рекомендую активировать WSL2, для этого можно выполнить команды PowerShell (напоминаю, что нужно запускать его от имени Администратора):

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

Также скачаем и установим сам WSL2 с официального сайта Microsoft

После выполненных действий рекомендую перезагрузить PC, т.к. изменения серьезные.

Сделаем WSL2 основным WSL через PowerShell

Теперь можем установить Ubuntu из Windows Store
После запускаем и устанавливаем Ubuntu (данный процесс можете загуглить — там нет ничего сложного)

Затем поставим X Server, благодаря которой мы сможем запускать графические приложения Linux на Windows. Ссылка на Windows Store

Запустите Windows Subsystem for Linux (X Server) и дождитесь появления ввода окна команд — это требуется, чтоб X Server прописал все зависимости.

Читайте также:  Лучшие инструменты kali linux

Ещё раз перезагрузим PC, т.к. опять же были внесены крупные изменения.

Установка Qt Creator

После перезагрузки открываем Windows Subsystem for Linux (X Server) и ждем появления окна ввода команд.

Активируем root доступ (да, можно все делать через sudo, но для новичков так проще)

apt-get update && apt-get install build-essential qt5-default qtcreator qtbase5-examples qtdeclarative5-examples git mesa-common-dev -y

(Код длинный, поэтому лучше копировать через Ctrl+A, Ctrl+C)

Выходим из root и запускаем Qt Creator

Установка кросс-компилятора MXE

Да, вы уже можете писать приложения под Qt. Но все же они будут работать из под Linux. Чтобы иметь возможность компилировать под Windows — нужен кросс-компилятор.

Откроем Ubuntu терминал и скачаем MXE:

git clone https://github.com/mxe/mxe.git

Установим необходимые пакеты:

sudo apt-get update && sudo apt-get install autoconf automake autopoint bash bison bzip2 flex g++ g++-multilib gettext git gperf intltool libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libssl-dev libtool-bin libxml-parser-perl lzip make openssl p7zip-full patch perl python3 python3-mako ruby sed unzip wget xz-utils python-is-python3 g++-multilib libc6-dev-i386 texinfo wine -y

(Код длинный, поэтому лучше копировать через Ctrl+A, Ctrl+C)

Перейдем в директорию mxe

И запускаем сборку x86 версии (можете пойти попить чайку — это займет 2-3 часа)

И запускаем сборку x64 версии (можете пойти попить чайку — это займет 2-3 часа)

make MXE_TARGETS=x86_64-w64-mingw32.static qt5

После сборки — привязываем Qt к сборкам, аналогично как если бы была статическая компиляция.

Подробнее о привязке — можете посмотреть видео с YouTube (специально начало пропустил до привязки — по времени 16:12)

Итог

В итоге получим систему кросс-компиляции под Linux и Windows. А также совершенно легально (без VPN и прочем мути) установленный Qt Creator.

Читайте также:  Linux file input and output

Послесловие

Изначально делал для себя, но метод очень понравился, поэтому решил поделиться. Если есть вопросы/предложения — пишите комментарии.

Источник

Cross-Compiling

  1. Select Extensions >Qt VS Tools >Qt Versions >to add a new Qt version.
  2. In the Version field, enter a name for the Qt version. If you add the path to Qt first, this field is filled automatically.
  3. In Host, select Linux WSL or Linux SSH.
  4. In the Path field, enter the path to the Qt installation.
  5. In the Compiler field, enter the cross-compiler to use. The default value is g++.

Compiling on WSL

Using a WSL instance to run the cross-compiler is faster than using an SSH connection to a build host. When using SSH, MSBuild must first upload the source files to the remote host, whereas WSL mounts local drives in /mnt , making file access instantaneous.

MSBuild assumes that paths specified in options are local paths and maps them to corresponding Linux paths rooted on /mnt . For example:

C:\include\foolib maps to /mnt/c/include/foolib

Using absolute Linux paths as value of Extensions > Qt VS Tools > Options > Qt/MSBuild can lead to incorrect mappings. For example, /home/user/raspi maps to /mnt/home/user/raspi .

To avoid this issue, create symbolic links in /mnt to other top-level directories in the WSL instance file system.

© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.

Читайте также:  Yaml to json linux

Источник

Русские Блоги

Условная компиляция исходного кода в Qt Creator в зависимости от того, является ли это система Windows или система Linux.

В файлах .h и .cpp для кода, который должен быть скомпилирован на разных платформах: добавьте следующие инструкции условной компиляции:

#ifdef идентификатор Программный сегмент 1 #else Программный сегмент 2 #endif 
//Система Windows включает имя файла заголовка без учета регистра, но система Linux включает имя файла заголовка с учетом регистра, поэтому используйте условную компиляцию #ifdef unix #include "mainwindow.h" #else #include "MainWindow.h" #endif

При использовании iar или keil для написания однокристального микрокомпьютера вы можете # определить сначала переменную, а затем скомпилировать разные коды в соответствии с разными значениями переменной.

То же самое можно сделать в Qt. Для встроенных программ он обычно компилируется на X86, Debug, а затем развертывается в ARM для запуска. Таким образом, могут быть некоторые различия между X86 и ARM, например, разные платформы., Вызов различные библиотеки, чтобы вы могли # сначала определить переменную, а затем автоматически включить то, что нужно скомпилировать в соответствии с переменной.

Сначала добавьте параметр сборки DEFINES в настройки проекта: например, я добавил параметр DEFINES + = ARM специально для работы на плате ARM.

 Оценка условий может использоваться непосредственно в исходном файле. #ifdef ARM // arm use only QWSServer::setCursorVisible(false); #endif Его также можно использовать в профессиональных файлах: if(contains(DEFINES,ARM))< message("compile for arm") LIBS += -L../armlib -lfpp >else< message("compile for x86") LIBS += -L../x86lib -lfpp >

Источник

Оцените статью
Adblock
detector