Qmake中win64配置的标识符

37
在Qmake项目文件中是否有“win64”标识符?Qt Qmake高级文档没有提到除了unix/macx/win32之外的其他内容。
迄今为止,我尝试使用:
win32:message("using win32")
win64:message("using win64")
amd64:message("using amd64")

结果始终是“使用win32”。

我必须为x32和x64项目使用单独的项目文件,这样它们才能编译正确的库吗?是否有其他方法来区分32位和64位环境?

5个回答

37

我是这样做的

win32 {

    ## Windows common build here

    !contains(QMAKE_TARGET.arch, x86_64) {
        message("x86 build")

        ## Windows x86 (32bit) specific build here

    } else {
        message("x86_64 build")

        ## Windows x64 (64bit) specific build here

    }
}

36

自从 Qt5 开始,你可以使用 QT_ARCH 来检测你的配置是 32 位还是 64 位。当目标是 32 位时,它返回 i386,而在 64 位目标的情况下,其值为 x86_64。因此可以这样使用:

contains(QT_ARCH, i386) {
    message("32-bit")
} else {
    message("64-bit")
}

12

更新:自最近以来,Qt有一种透明且易于使用的方法来完成此操作,无需手动麻烦:

win32-g++:contains(QMAKE_HOST.arch, x86_64):{
    do something
}

来源:全新的Qt Dev FAQ


哇,我已经搜索了好几天了。感谢你的回答。 - Violet Giraffe
1
应该使用 QMAKE_TARGET 而不是 QMAKE_HOST 吗? - Simon
1
@Simon QMAKE_TARGET 包含项目目标的名称(即二进制文件)。 qmake 从未设计用于处理目标与主机不同的交叉编译。 - rubenvb
1
@rubenvb qmake 可以进行交叉编译,例如在 Linux 上为 Windows 进行交叉编译。被接受的答案使用了 QMAKE_TARGET,但对我来说并不起作用。 - Simon
1
@Simon,那些是经过修补的Qt源代码和mkspecs,允许这样做。因此,未经修改的qmake不能进行交叉编译。这是一个目标一个单独的qmake和Qt的事情。我不知道Qt5是否有所改进。只需按照链接,QMAKE_TARGET不是您和OP认为的那样。至少如果我相信文档... - rubenvb

2

我已经想出了一种方法。

Qt允许您传递任意的配置参数,您可以使用这些参数来分离目标。

在项目文件中设置一个条件配置:

CONFIG(myX64, myX64|myX32) {
    LIBPATH += C:\Coding\MSSDK60A\Lib\x64
} else {
    LIBPATH += C:\Coding\MSSDK60A\Lib
}

将自定义配置传递给qmake

qmake CONFIG+=myX64

您将获得所需的结果。


当然,您可以使用包含公共部分的不同.pro文件,但就个人而言,我认为那很麻烦。 - Tuminoid

0

不可以,但是你可以创建并使用一个新的mkspec,我认为qmake也会定义一个以当前mkspec命名的平台标识符。你为什么需要测试64位?

里德


我想在Qt中使用Win32 API,必须链接Windows SDK的库。显然这些库位于不同的目录中,因此我需要使用LIBS包含不同的文件。也许我做错了?有更好的方法吗? - Tuminoid
具体来说,这是针对Qt开源版的,而不是商业版带有VS集成的,但是通过命令行和qmake项目文件实现。 - Tuminoid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接