让qmake与32位和64位并行安装一起工作

Getting qmake to work with a 32bit and 64bit side by side installation

本文关键字:并行 安装 一起 工作 64位 qmake 32位      更新时间:2023-10-16

我希望在源代码管理下使用我们正在构建的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_BINQT_INSTALL_BINS检测为.../bin/,当我构建时,它试图从该文件夹中运行uic和其他工具,但失败了。

文档指出,这些变量可以通过运行qmake -set QT_HOST_BIN path来设置,但这似乎是一个系统范围的设置,这是不可取的,无论如何都不起作用,将它们设置为环境变量也不起作用。

在这一点上,我倾向于放弃,选择两个独立的32位和64位Qt安装。尤其是因为我还没有开始研究如何处理plugins文件夹。Qt似乎还没有开始考虑多拱门构建设置。

不需要任何这种复杂性。你需要3或5个文件夹:

  1. Qt源文件夹,在您的工作副本中
  2. 32位生成文件夹
  3. 64位生成文件夹
  4. 32位安装文件夹
  5. 64位安装文件夹

如果您希望将二进制文件存储在源代码管理中,那么除了文件夹1之外,您只需要存储文件夹4和5。

Qt的来源中没有任何文件的调整。当构建使用Qt的项目时,您必须使用文件夹#2或文件夹#3中的qmake,这取决于您对构建的选择。你也可以用这种方式构建多个Qt版本,包括构建Qt4和Qt5。

由于必须在源代码管理中保留二进制文件是非常疯狂的,因此您应该编写一个顶级的makefile或批处理文件:

  • 配置、构建和安装您需要的每个Qt构建
  • 运行相关的qmakes为您的项目准备makefile
  • 最后,构建项目

然后,在结账时,只需运行一个脚本或make即可构建所有内容。您还应该从QtCreator的下载中捆绑jom.exe,因为这将并行构建nmake makefile。

我强调,任何Qt源都不需要更改,并且您不需要在项目文件中执行任何操作即可使用特定版本的Qt。一切都由您调用的qmake决定,以设置项目的Makefiles。

你也需要为你的应用程序使用影子构建文件夹。一般来说,不使用影子构建文件夹会适得其反。在对源代码进行小的更改后为多个目标重新构建时,它们可以节省大量时间。当而不是使用影子构建时,无需保持源文件夹的多个副本同步。这不值得。

我找到了这个指向qt.conf的答案。我发现在bin/x64bin/x86文件夹中有不同的qt.conf文件,我可以将它们指向不同的文件夹,例如:

[Paths]
Prefix = ../..
Binaries = bin/x64
Plugins = plugins/x64

使用此设置,构建可以成功地使用分离的bin/文件夹。

然而,我在阅读该答案时发现的另一个问题是,所有.prl文件中都有硬编码的路径。这意味着,如果代码被签出到不同的目录,这可能不会构建。我将不得不在另一个问题中询问这一点,看看是否有可能将Qt置于源代码管理之下。

编辑:目前,似乎可以通过编辑所有.prl文件以使用相对路径来绕过这一问题。我不知道为什么它们一开始就不是相对路径,因为看起来你不应该扰乱目录结构。