在 .pro 文件中,是否有我可以使用的 Qt 安装路径变量?

12

我想将音频插件复制到目标目录,因为我需要它来进行部署。

它存储在<PATH_TO_QT_INSTALL>\gcc\plugins\audio中。

我不知道可以在我的 /pro 文件中使用哪个变量来引用安装路径。

我想添加的代码行类似于:

QMAKE_PRE_LINK += cp $$PATH_TO_QT_INSTAL/gcc/plugins/audio/* $$DESTDIR/lib || :;

有一个名为%{CurrentProject:QT_INSTALL_BINS}的环境变量可以让我获取到$$PATH_TO_QT_INSTAL/gcc/bin,但是我似乎只能在Qt Creator GUI构建设置中使用它,而这对我来说没有用,因为这些设置存在于.pro.user文件中。为什么Qt没有通用的构建设置机制 : ( ...(这只是一个旁问,无需回答)

我的问题是如何在我的pro文件中引用Qt安装路径,是否有一个可以做到这一点的变量,或者其他任何方法?


1
你可以通过运行 qmake -query QT_INSTALL_BINS 命令来获取bin目录的路径,但我不知道它会如何帮助到你。 - vahancho
嗯...其实这给了我一个好主意。我已经有一个deployQt.sh脚本,它使用ldd查找所有需要的qt库并将它们复制到我的lib文件夹中...所以我可能可以将你的qmake查询命令添加到其中。让我试一下,如果有效的话我会告诉你并把它作为答案发布,谢谢。 - code_fodder
另一方面,如果您可以访问qmake,则知道其路径,即QT_INSTALL_BINS。 - vahancho
@vahancho,我不明白你的意思,我可以在哪里使用QT_INSTALL_BINS吗?- 它似乎不是pro文件中填充的变量? - code_fodder
你说过,你可以在你的shell脚本中添加qmake查询命令。这意味着你已经知道调用它的qmake可执行文件的路径,对吗?如果是这样,那么该路径就是Qt二进制目录的路径,其中包含qmake。因此,你可以在你的脚本中定义一个环境变量,以便从pro文件中访问它。 - vahancho
啊...不,/usr/bin中有一个qmake似乎指向我的安装路径(在一台电脑上),而在另一台电脑上我有两个或三个qmake...所以我将相关的一个复制到bin目录中...变得有点混乱了 - 但正如你所说,知道正确的安装路径是关键 : ( - code_fodder
3个回答

9

1
非常感谢,这正是我想要的。事实上,由于我想要插件目录,所以有(从您参考的文档):message(Plugins: $$[QT_INSTALL_PLUGINS])。 我目前使用qt5.5,但格式$[]不起作用,但$$[]可以正常工作 - 不确定是否适用于更晚的Qt版本? - code_fodder
不好意思,是我没有完全阅读第一个链接:看起来糟糕的论坛软件正在删除/折叠双$符号(那里有一条评论指出了这一点)。我已经编辑了我的答案以供参考。 - eclarkso

6

另一个解决方案(可能不像上面的 $[QT_INSTALL_LIBS] 那样花哨,但我已经使用它相当长的时间了:

TEMPNAME = $${QMAKE_QMAKE}
QTPATH = $$dirname(TEMPNAME) 

然后您可以像这样引用它(例如访问某些私有标头)或复制内容:
INCLUDEPATH += $$QTPATH/../../Src/qtbase/src/sql/kernel

谢谢,你的解决方案对我非常有用 - 我使用了 QT_PLUG_PATH = $$dirname(QMAKE_QMAKE)/../plugins 所以+1,但是我必须把答案给eclarkso,因为方括号内的变量列表正好给了我所需的内容。 - code_fodder

4

变量QT_INSTALL_PREFIX似乎是您想要的,但它高度依赖于Qt的安装方式。

为了更好地调整与您感兴趣的确切Qt目录相关的内容,以下命令将为您提供有关Qt的详尽信息:

/path/to/qmake -query

# Output
# QT_INSTALL_PREFIX:/path/to/Qt
# QT_INSTALL_ARCHDATA:...
# ...

举例来说,就像之前提到的QT_INSTALL_LIBS,在这个列表中列出了相关变量。一旦您找到与您用例对应的变量,就可以像之前提到的那样在您的.pro文件中使用它,即例如$$[QT_INSTALL_PREFIX]

注意:根据qmake文档,qmake属性需要使用方括号($$[])。

版本:已测试过Qt 5.6.2和qmake 3.0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接