我如何在Qt中选择构建选项

时间:2018-03-14 06:48:20

标签: c++ qt cross-compiling

我正在尝试为x86编译一个项目,类似于下面的代码示例.pro文件。如何用x86或arm编译?

x86 {
INCLUDEPATH += fo
LIBS += fo
DEFINES += CONFIG_ARM }
arm {
INCLUDEPATH += foo1
LIBS += foo2
DEFINES += CONFIG_ARM }

3 个答案:

答案 0 :(得分:2)

在您的专业版文件中,以下语法应该有效:

equals(QMAKE_TARGET.arch, x86) {
    message( "It's x86" )
    # Add specific x86 stuff here
}

equals(QMAKE_TARGET.arch, arm) {
    message( "It's armeabi-v7a" )
    # Add specific arm stuff here
}

如果您要定位Android,QMAKE_TARGET.arch可能会更改为ANDROID_TARGET_ARCH。 实际上,您应首先使用message来确定在您的案例中使用的正确变量,然后在equals语句中使用正确的变量。例如:

message (ANDROID:$$ANDROID_TARGET_ARCH)
message (HOST:$$QMAKE_HOST)
message (HOST:$$QMAKE_HOST.arch)
message (TARGET:$$QMAKE_TARGET)
message (TARGET:$$QMAKE_TARGET.arch)

然后检查消息选项卡以查看每个变量中的内容。

答案 1 :(得分:0)

在.pro文件中,您可以根据所使用的平台定义特定设置,例如要使用的库,包含路径等。我不确定x86是否是有效的标识符。它应该是WIN32,或者从Qt5开始:

contains(QT_ARCH,i386)

无论如何,你正在尝试编译一个完全不同的特定平台。您正在寻找的是正确的编译器来完成这项工作。在设置对话框中查看套件详细信息(“构建和运行”选项中的“套件”选项卡)。在那里,您可以选择您选择的编译器。如果编译器不存在,则必须安装它。

答案 2 :(得分:0)

平台/体系结构在Qt安装路径的mkspecs文件夹中定义:$QTDIR/mkspecs

例如:

C:\Qt\5.10.0\mingw53_32\mkspecs // Qt Windows

~/Qt/5.10.1/gcc_64/mkspecs // Qt Linux

Qt对可识别的平台/体系结构使用QMAKE_PLATFORM ... QMAKE_TARGET ..指令,因此您可以通过查看对应的文件来了解您的特定平台/体系结构是否具有已定义的标记您的工具包位于mkspecs/common文件夹下,例如列出Qt版本中所有支持的平台标签:

cd C:\Qt\5.10.0\mingw53_32\mkspecs\common

find "QMAKE_PLATFORM" *.conf | find "="

QMAKE_PLATFORM          = integrity
QMAKE_PLATFORM          = integrity
QMAKE_PLATFORM          = integrity
QMAKE_PLATFORM         += ios
QMAKE_PLATFORM         += linux
QMAKE_PLATFORM         += mac darwin
QMAKE_PLATFORM         += macos osx macx
QMAKE_PLATFORM          = win32
QMAKE_PLATFORM          = qnx $$QMAKE_PLATFORM
QMAKE_PLATFORM          += solaris
QMAKE_PLATFORM         += tvos
QMAKE_PLATFORM         += uikit
QMAKE_PLATFORM         += unix posix
QMAKE_PLATFORM         += watchos

列出所有支持的架构标签:

find "QMAKE_TARGET" *.conf | find "QMAKE_TARGET"

contains(QMAKE_TARGET.arch, x86_64) {
contains(QMAKE_TARGET.arch, x86_64) {