我正在创建另一个构建自动化工具,但我需要获取结局变量内容,因为它们位于qmake生成的makefile中,但没有生成所有的makefile ... 有没有办法(通过创建另一个模板,或查询qmake ...)来获取所有包含,链接等...?
(无论输出格式如何,我只想快速获取路径)
PS:我已经尝试在qmake变量上使用message(),但它出了空字符串
答案 0 :(得分:3)
您是否看到了命令行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的结果将不会给你一个有用的答案。
如果您是从源构建的,并且想要使用那个构建目录,那么您需要运行./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 /本地/ 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的情况下,我想不出更简单的方法来做你想做的事。