MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Как настраивать подключение библиотек в *.pro-файле по условию для целевой платформы Android и как делать условную компиляцию под Android
12.03.2018
10:11
Текстовые метки: qt, qml, qmake, pro, android, андроид, десктоп, desktop, target platform, целевая платформа, условная компиляция, настройка библиотеки, архитектура, define
Раздел: Компьютер - Программирование - Язык C++ - Библиотека Qt - Инсталляция Qt и сборка проектов

При написании кроссплатформенных программ под Android и десктоп с использованием фреймверка Qt, могут возникнуть две следующие задачи:


  • Сделать подключение библиотек внутри файла проекта (*.pro - файла) с учетом целевой платформы
  • Сделать условную компиляцию в исходном коде в зависимости от целевой платформы


Чтобы сделать условное подключение библиотеки в *.pro-файле, можно воспользоваться областью действия (scoupe) с именем android, вот так:


QT+=quick \

svg \

xml \

gui \

core


android {

QT+=androidextras

}


В момент сборки под Android, сработает строка QT+=androidextras.


Кстати, можно даже подключать библиотеки в зависимости от целевой архитектуры:


android {

 

equals(ANDROID_TARGET_ARCH, armeabi-v7a) {

[doAndroidArmStuff]

}

equals(ANDROID_TARGET_ARCH, armeabi) {

[doAndroidArmeabiStuff]

}

equals(ANDROID_TARGET_ARCH, x86) {

[doAndroidx86Stuff]

}

}


Для исходного кода можно использовать условную компиляцию с проверкой наличия определения Q_OS_ANDROID:


#ifdef Q_OS_ANDROID

#include "AndroidSpecificClass.h"

#endif


Точно так же можно настраивать сборку для других целевых платформ. Правда, найти допустимые названия для областей действия (scoupe) в официальной документации Qt не так то просто. По опыту можно сказать, что работают следующие наименования:


  • win32
  • win64
  • win32-msvc
  • win*
  • macx
  • unix
  • linux-g++
  • android
  • wince*


UPD: Для определения допустимых имен Scoupe можно зайти в каталог инсталляци Qt, найти в нем каталог, содержащий наименование версии Qt, в нем будут каталоги с поддерживающимися платформами, и в каждом таком каталоге будет подкаталог mkspecs. Например:


qt_5_9_2_install_dir/5.9.2/android_armv7/mkspecs/

qt_5_9_2_install_dir/5.9.2/android_x86/mkspecs/

qt_5_9_2_install_dir/5.9.2/gcc_64/mkspecs/


В каждом таком каталоге можно дать следующую команду:


grep -E -o -r 'QMAKE_PLATFORM.*?$'


Результат будет примерно следующим:


dummy/qmake.conf:QMAKE_PLATFORM = dummy_platform

openbsd-g++/qmake.conf:QMAKE_PLATFORM          = openbsd

hpuxi-g++-64/qmake.conf:QMAKE_PLATFORM          = hpux

android-g++/qmake.conf:QMAKE_PLATFORM          = android

solaris-cc-64/qmake.conf:QMAKE_PLATFORM          = solaris

netbsd-g++/qmake.conf:QMAKE_PLATFORM          = netbsd

...


В правом столбце и перечислены допустимые имена областей действий (scope), которые можно использовать в *.pro-файлах.


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования