【问题标题】:Identifier for win64 configuration in QmakeQmake中win64配置的标识符
【发布时间】:2010-09-26 06:43:24
【问题描述】:

Qmake 项目文件中是否有“win64”标识符? Qt Qmake advanced文档除了unix/macx/win32没有提到。

到目前为止,我已经尝试过使用:

win32:message("using win32")
win64:message("using win64")
amd64:message("using amd64")

结果总是“使用win32”。

我必须为 x32 和 x64 项目使用单独的项目文件,以便它们可以针对正确的库进行编译吗?还有其他方法可以区分 32 位和 64 位环境吗?

【问题讨论】:

    标签: windows qt 64-bit qt4 qmake


    【解决方案1】:

    我是这样做的

    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
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      从 Qt5 开始,您可以使用 QT_ARCH 来检测您的配置是 32 还是 64。当目标是 32 位时,返回 i386,如果是 64 位目标,它的值是 @987654323 @。所以它可以像这样使用:

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

      【讨论】:

        【解决方案3】:

        更新:从最近开始,Qt 就有了一种透明且轻松的方式,无需手动操作:

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

        来源:the brand new Qt Dev FAQ

        【讨论】:

        • 哇,我已经搜索了好几天了。谢谢你的回答。
        • 不应该是QMAKE_TARGET而不是QMAKE_HOST吗?
        • @Simon QMAKE_TARGET 包含项目目标的名称(即二进制文件)。 qmake 从未设计用于处理 target != host 的交叉编译。
        • @rubenvb qmake 可以交叉编译,例如适用于 Linux 上的 Windows。接受的答案使用QMAKE_TARGET,但它对我不起作用
        • @Simon 那些是修补过的 Qt 源代码和允许这样做的 mkspecs。所以不,qmake(未修改)不允许交叉编译。这是一个单一的 qmake-and-Qt-per-target 事情。我不知道 Qt5 是否有所改善。只需点击链接,QMAKE_TARGET 不是您和 OP 认为的那样。至少如果我能相信文档的话……
        【解决方案4】:

        我想出了一种方法。

        Qt 允许您传递可用于分隔目标的任意配置参数。

        通过在项目文件中进行条件配置:

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

        并将自定义配置传递给qmake

        qmake CONFIG+=myX64
        

        你会得到想要的结果。

        【讨论】:

        • 当然你也可以使用包含通用部分的不同 .pro 文件,但我个人觉得这很痛苦......
        【解决方案5】:

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

        芦苇

        【讨论】:

        • 我想在 Qt 中使用 Win32 API,我必须链接来自 Windows SDK 的库。显然这些库位于不同的目录中,因此我需要使用 LIBS 包含不同的文件。也许我做错了?有没有更好的方法?
        • 特别是在 Qt 开源版中,不是带有 VS 集成的商业 Qt,而是来自命令行和通过 qmake 项目文件。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        相关资源
        最近更新 更多