【问题标题】:Patch Qmake to use specifics ( and relative) paths修补 Qmake 以使用特定(和相对)路径
【发布时间】:2015-12-15 09:04:58
【问题描述】:

我想分发我使用 Qt 制作的 SDK。 为此,我制作了一个脚本来生成一个包含我的库(libmysdk.so 等)的 tarball,以及一个带有 qmake 二进制文件的嵌入式无头“最小 Qt”(-no-gui、-no-widgets 等) .

这里的目标是允许用户使用我的 Sdk 开发应用程序,用他想要的任何内容填充 .pro,并让他调用 qmake 以生成适当的 Makefile。

我的问题是生成的 Makefile 包含指向我在本地编译我的 qmake 的位置(/home/john/mystuff/myproject 等)的绝对路径和相对路径,使其根本无法移植。

在 Makefile 中:

CC            = /opt/arm-2015.02-ct-ng/bin/arm-unknown-linux-gnueabi-gcc
[...]
INCPATH       = -I. -Iinclude -I../../home/john/mystuff/myproject/builddir

我正在寻找一种方法来强制 qmake 使用我在 tarball 中提供的“嵌入式 Qt 安装”。

我尝试了两件事:

./qmake -query "QT_INSTALL_HEADERS"

将打印(错误的)绝对路径。但是

./qmake -set "QT_INSTALL_HEADERS" "foo/bar/something"

不会更新 QT_INSTALL_HEADERS 值。我的猜测是内置值不能在 qmake 二进制文件中更改,对吗?

我的第二次尝试是使用这个https://github.com/qtproject/qtsdk 更具体地说是 patch_qmake_qt_key.py,其目标显然是更新二进制文件中的一些键(无论是否内置)。 但我尝试了几个“键”名称,总是出现同样的错误:

Could not find given key: QT_INSTALL_HEADERS

Could not find given key: INSTALL_HEADERS

Could not find given key: PLEASE_WORKS
etc.

(是否有可以找到这些“键名”的地方/文档?)

有没有办法在 qmake 编译之后(或者之前)设置路径,最好是相对于 tarball 根目录,或者如果不可能,设置绝对路径的方法(可能通过调用 ./install.sh使用 pwd 和一些东西的组合更新 qmake 二进制文件。

非常感谢!

【问题讨论】:

  • 我不明白这个问题和你想要达到的目标。一个不是要共享生成的 Makefile,而是要在本地运行 qmake 以从共享的 .pro 文件中生成一个新的。 QMake 也将使用它所属的 Qt。
  • 我不想共享 makefile,我想共享 .pro(用户将编辑它以添加自己的文件)和 qmake 二进制文件。但我想用我的本地 Qt 安装生成 qmake 二进制文件,然后“修补”它以使用我在 tarball 中提供的嵌入式 Qt。

标签: c++ qt qmake


【解决方案1】:

您怀疑这完全是关于键名是正确的,因为它们在外部和内部表示之间有所不同:特别是,外部可见的 QT_INSTALL_HEADERS,实际上是 qt_hdrspath 内部的 qmake 可执行文件。

更重要的是,上述内容仅适用于来自 Qt 3.x 和 4.x 的 QMake。从 Qt 5.x 开始,QMake 只定义了一组狭窄的基本路径,实际上,qt_prfxpath(加上qt_epfxpath)和qt_hpfxpath,分别对应于QT_INSTALL_PREFIXQT_HOST_PREFIX。所有其他位置都是在这些前缀之上计算的,带有硬编码的子路径,这些子路径不能像基础变量那样容易地改变,——至少不是自动的,因为它们只能通过寻找它们的确切值来找到,因为几乎没有没有为它们的价值预留额外的空间。例如,QT_INSTALL_HEADERS 在 Linux 包中计算为 QT_INSTALL_PREFIX + "/include/qt5",在 Windows 构建(MSVC 和 MinGW)中计算为 QT_INSTALL_PREFIX + "/include"

作为patch_qmake_qt_key.py 脚本的替代方案,如果提供了正确的键名,它确实可以工作,我创建了QmakePatch 实用程序,您可能会发现它本身或它的文档很有帮助:README.md 列出了键名和其他已知 Qt / QMake 版本的技术细节(GitHub 显示在 repo 的主页上)。


但是,关于相对路径,我强烈怀疑在Makefiles 中使用它们是一个好主意,因为当前工作路径通常在构建过程中更改多次。例如,即使您尝试使用 make INSTALL_ROOT=./destdir install,这也会导致每个子项目都安装到它们自己的 ./destdir 子目录中——而不是您调用 Make 的最顶层目录中的那个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2012-12-29
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多