如何通过 Qt 项目文件将命令的输出作为编译器标志传递?
Posted
技术标签:
【中文标题】如何通过 Qt 项目文件将命令的输出作为编译器标志传递?【英文标题】:How can I pass the output of a command as a compiler flag through a Qt project file? 【发布时间】:2009-05-12 12:14:35 【问题描述】:我正在尝试将“git describe”的输出添加到我的应用程序的 about 窗口,以便更容易找出人们使用的应用程序版本。
我可以通过添加以下编译器标志来做到这一点: -DAPP_VERSION="$(git describe HEAD)"
但是由于项目是基于qmake的,我想想办法把这个放到Qt项目文件中。 这可能吗?如果有,怎么做?
编辑: 我尝试添加以下内容:
QMAKE_CXXFLAGS += -DAPP_VERSION="$(git describe HEAD)"
但它只是给了我“-DAPP_VERSION=”,所以我想我必须使用一些转义字符,但我不知道哪些以及在哪里。 :/
【问题讨论】:
【参考方案1】:问题通过此链接解决:http://robertcarlsen.net/blog/2009/01/06/qmake-xcode-bug-258
这是我用来测试它的示例 qt 项目: qt.pro:
######################################################################
# Automatically generated by qmake (2.01a) Thu Apr 2 16:23:05 2009
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
# Input
SOURCES += qt.cpp
QMAKE_CXXFLAGS += -DAPP_DATE=\\\"`date +'\"%a_%b_%d,_%Y\"'`\\\"
QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"`git describe`\\\"
qt.cpp:
#ifndef APP_DATE
#define APP_DATE "1/1/1970"
#endif
#ifndef APP_VERSION
#define APP_VERSION "local-dev"
#endif
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
QApplication app(argc, argv);
QString version = QString("version ") + APP_VERSION + ' ' + APP_DATE;
QLabel *label = new QLabel(version);
label->show();
return app.exec();
【讨论】:
这不是和上面描述的一样吗?如果你切换分支并且 qt.pro 和 qt.cpp 没有改变,它不会被重新编译......但是另一个分支可能在其他文件中有变化(并且也有不同的哈希)【参考方案2】:你也可以使用
QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"$$system(git describe HEAD)\\\"
这将在 qmake 运行期间只执行一次 git 命令,这可能会加快大型项目的编译速度。但是,您必须确保在从存储库中提取后运行 qmake
和 make clean
。
【讨论】:
不健壮,因为很容易错过任何更改(例如脏)。 此功能对于提供给其他人的构建是必需的。在这种情况下,您应该有一个构建脚本,以确保树不脏并且完成了完整的重建(包括 qmake 运行)。以上是关于如何通过 Qt 项目文件将命令的输出作为编译器标志传递?的主要内容,如果未能解决你的问题,请参考以下文章