【问题标题】:Qt Creator: how to tell win32 from win64Qt Creator:如何区分 win32 和 win64
【发布时间】:2011-07-05 07:58:14
【问题描述】:

我必须在 .pro 文件中做这样的事情:

win32 {
    LIBS += -L../3rdparty/libusb-win32/lib/msvc -llibusb
} else
win64 {
    LIBS += -L../3rdparty/libusb-win32/lib/msvc_x64 -llibusb
}

问题是它不起作用,它总是链接win32库。 有什么建议吗?

【问题讨论】:

  • 为什么会这样?没有别的就不行吗?你在 x64 平台上编译正确吗?
  • 我猜“else”没有任何区别。不,这两种方式都行不通。
  • rubenvb:非常感谢,不知什么原因没找到。

标签: c++ qt 64-bit qmake


【解决方案1】:

你可以使用QT_ARCH变量来检测你的配置是32还是64:

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

当目标是 32 位时,变量返回 i386,如果是 64 位目标,它的值为 x86_64

【讨论】:

  • 整洁!形式上与检测编译器架构不同,但实际上相同,因为您将无法构建使用 32 位 Qt 和 64 位编译器的项目,反之亦然。
  • 注意:这似乎“检测”了您在 Kit Config 的“Qt 版本”字段下设置的内容。如果您将 32 位 mingw-w64 套件设置为使用 64 位 QT,则此代码将检测 64 位。 (为什么有人会这样做?在我的用例中,我使用 Qt Creator 来构建非 QT 项目,因为我喜欢 IDE;而且我还没有安装 32 位 QT,所以你必须选择 64-有点 QT,因为没有其他可行的选择)。
【解决方案2】:

2016 年 10 月更新。以下代码适用于 Windows(至少适用于所有最近的 MSVC 编译器 - 未测试 MinGW)、Mac OS X (clang) 和 Linux (GCC)。如果您不需要 Qt 4 支持,请随意省略第一个子句并直接引用 QT_ARCH

greaterThan(QT_MAJOR_VERSION, 4) {
    TARGET_ARCH=$${QT_ARCH}
} else {
    TARGET_ARCH=$${QMAKE_HOST.arch}
}

contains(TARGET_ARCH, x86_64) {
    ARCHITECTURE = x64
} else {
    ARCHITECTURE = x86
}

【讨论】:

    【解决方案3】:

    我们是这样做的:

    win32 {
    win32-g++:contains(QMAKE_HOST.arch, x86_64):{
        LIBS += ... #for win64
    } else {
        LIBS += ... #for win32
    }
    }
    

    【讨论】:

    • 这仅适用于 Qt 4。对于 Qt 5,请参阅我的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多