c++ - 获取一个Qt项目需要的所有include路径、lib等

标签 c++ qt qmake

我正在创建另一个构建自动化工具,但我需要获取最终变量内容,因为它们在 qmake 生成的 makefile 中,但不生成所有 makefile... 有没有办法(例如,通过创建另一个模板,或查询 qmake...)获取所有包含、链接等...?

(无论输出格式如何,我只想要快速的路径)

PS:我已经尝试在 qmake 变量上使用 message(),但它输出空字符串

最佳答案

你看过命令行qmake -query ...的输出吗?

在我的系统上它给出(为清楚起见删除了大部分输出):

~ sez$ env PATH=$HOME/build/qt5/qtbase/bin qmake -query
QT_SYSROOT:
QT_INSTALL_PREFIX:/usr/local/Qt-5.2.0
QT_INSTALL_DATA:/usr/local/Qt-5.2.0
QT_INSTALL_HEADERS:/usr/local/Qt-5.2.0/include
QT_INSTALL_LIBS:/usr/local/Qt-5.2.0/lib
QMAKE_SPEC:macx-clang
QMAKE_VERSION:3.0
QT_VERSION:5.2.0

它在早期版本中不那么冗长。您可以像这样查询单个变量:

~ sez$ env PATH=$HOME/build/qt5/qtbase/bin qmake -query QT_INSTALL_HEADERS
/usr/local/Qt-5.2.0/include

这是否满足您的需求?请注意,它会报告在构建 Qt 时通过 make install 安装文件的位置。这意味着,如果您构建了 Qt 但未运行“make install”,qmake -query 的结果将不会为您提供有用的答案。

如果您已经从源代码构建并且想要使用构建目录之外的 then,那么您需要运行 ./configure -prefix=$PWD,然后 make install

编辑:

对于我的 qmake 生成的 Makefile 之一,我有 -

INCPATH = -I/usr/local/Qt-5.2.0/mkspecs/macx-clang -I/Users/sez/depot/plistinator/src -I/usr/local/Qt-5.2.0/lib/QtWidgets.framework/Versions/5/Headers -I/usr/local/Qt-5.2.0/lib/QtXml.framework/Versions/5/Headers -I/usr/local/Qt-5.2.0/lib/QtGui。 framework/Versions/5/Headers -I/usr/local/Qt-5.2.0/lib/QtCore.framework/Versions/5/Headers -I。 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode .app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers -I。 -我。 -F/usr/local/Qt-5.2.0/lib

这取决于指定的 Qt 模块,例如

QT += widgets xml

鉴于该信息,您可以使用任何您正在自动化的环境重建上述 INCPATH,例如,对于 bash shell 表达式,其中的一部分可能是

XML_INC=$(qmake -query QT_INSTALL_LIBS)/QtXml.framework/Versions/5/Headers

要获得 mkspecs,您可以这样做

MKSPEC_INC=$(qmake -query QT_INSTALL_PREFIX)/mkspecs/$(qmake -query QMAKE_SPEC)

关于 SDK 中的 GL 路径,它们将始终包含在 Qt 中,因此您可以通过捕获 gcc -v 的输出来构造它们。

然后将所有这些 *_INC 变量组合成最终结果。

为此提出一个完整的脚本超出了这个答案的范围,但我认为这种方法可以帮助您实现目标。我想不出一个更简单的方法来做你想做的事而不实际生成 Makefile。

关于c++ - 获取一个Qt项目需要的所有include路径、lib等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22126580/

相关文章:

c++ - Qt 中的 Qwizard 在窗口 8 上不显示完成和取消按钮,相同的代码在 7 上工作

c++ - 使用 qmake 构建多个版本的二进制文件

qt - QMake:范围如何工作?

qt - C++ Qt - 如何将 "-std=c++11"添加到 qmake 生成的 makefile 中?

c# - 为什么这个表达式在 C# 和 C++ 中产生不同的结果?

c++ - C/C++ 中的 MATLAB "filter"函数

c++ - 如何在 QTreeWidget 中选择一个项目?

c++ - 使用数据流将 char 复制到 QbyteArray 包含一些额外的字节

c++ - 在 C++ 中从其伪代码实现算法

c++ - Clang "couldn' t 推断模板参数“而 gcc/g++ 可以。哪个是正确的?