让 qmake 与 32 位和 64 位并排安装一起工作
Posted
技术标签:
【中文标题】让 qmake 与 32 位和 64 位并排安装一起工作【英文标题】:Getting qmake to work with a 32bit and 64bit side by side installation 【发布时间】:2014-09-02 10:18:41 【问题描述】:我想要在源代码控制下构建我们正在构建的 Qt 版本,并希望从同一源文件夹中并行构建 32 位和 64 位 Qt 以节省源代码控制空间。
设置库路径很简单,我的 qmake 文件中只有 QMAKE_LIBDIR_QT=$$PWD/Shared/Qt/$$QT_MAJOR_VERSION.$$QT_MINOR_VERSION.$$QT_PATCH_VERSION/lib/$$ARCH
和 QMAKE_LIBDIR
的类似声明。
但是分割bin/
文件夹并不容易。当从.../bin/x64
文件夹中使用 qmake 时,它会将 QT_HOST_BIN
和 QT_INSTALL_BINS
检测为 .../bin/
,当我构建它时,它会尝试从该文件夹运行 uic 和其他工具并失败。
documentation 声明这些变量可以通过运行 qmake -set QT_HOST_BIN path
来设置,但这似乎是系统范围的设置,这是不可取的并且无论如何都不起作用,将它们设置为环境变量也不行。
在这一点上,我倾向于放弃并为 32 位和 64 位安装两个单独的 Qt。特别是因为我还没有开始研究如何处理plugins
文件夹。似乎 Qt 甚至没有开始考虑多架构构建设置。
【问题讨论】:
【参考方案1】:不需要任何这种复杂性。您需要 3 或 5 个文件夹:
-
工作副本中的 Qt 源文件夹。
32 位构建文件夹。
64 位构建文件夹。
32 位安装文件夹。
64 位安装文件夹。
如果您希望将二进制文件存储在源代码管理中,除了文件夹 1 之外,您只需要存储文件夹 4 和 5。
Qt 的源代码中没有任何文件的调整。在构建使用 Qt 的项目时,您必须使用文件夹 #2 或文件夹 #3 中的 qmake,具体取决于您选择的构建。您还可以通过这种方式为多个 Qt 版本构建,包括为 Qt 4 和 Qt 5 构建。
由于必须将二进制文件保存在源代码管理中实在是太疯狂了,因此您应该编写一个*** makefile 或批处理文件:
配置、构建和安装您需要的每个 Qt 构建。 运行相关的 qmake 为您的项目准备 makefile。 最后,构建项目。然后,在结帐时,您只需运行一个脚本或 make 即可构建所有内容。您还应该从 Qt Creator 下载中捆绑 jom.exe,因为这将并行构建 nmake makefile。
我强调,任何 Qt 源代码都无需更改,您无需在项目文件中进行任何操作即可使用特定版本Qt的。一切都由您调用以设置项目的 Makefile 的 qmake 确定。
您也需要为您的应用程序使用影子构建文件夹。一般来说,不使用影子构建文件夹会适得其反。在小的源更改后为多个目标重建时,它们可以节省大量时间。当不使用影子构建时,不要介意需要保持源文件夹的多个副本同步。这不值得。
【讨论】:
【参考方案2】:我找到了指向qt.conf
的this answer。我发现bin/x64
和bin/x86
文件夹中有不同的qt.conf
文件,我可以将它们指向不同的文件夹,例如:
[Paths]
Prefix = ../..
Binaries = bin/x64
Plugins = plugins/x64
使用此设置,构建可以成功地使用单独的 bin/
文件夹。
但是,我在阅读该答案时发现的另一个问题是所有 .prl 文件中都将包含 硬编码 路径。这意味着如果代码被检出到不同的目录,这可能不会构建。我将不得不在另一个问题中询问这个问题,看看是否有可能将 Qt 置于源代码控制之下。
编辑:目前看来,似乎可以通过编辑所有 .prl 文件以使用相对路径来解决此问题。我不确定为什么它们不是开始的相对路径,因为看起来你不应该弄乱目录结构。
【讨论】:
以上是关于让 qmake 与 32 位和 64 位并排安装一起工作的主要内容,如果未能解决你的问题,请参考以下文章
navicat for mysql 64位和32位区别,win7 64位下用32位和64位有区别吗??
如何在同时拥有 64 位和 32 位版本的同时安装 64 位软件包?