我如何传递一个命令的输出作为一个编译器标志通过Qt工程文件?

StackOverflow https://stackoverflow.com/questions/852437

  •  21-08-2019
  •  | 
  •  

我想要的输出“混帐形容”添加到我的应用程序的窗口,所以它更容易找出人们使用的应用程序是什么版本。

我可以通过添加以下编译器标志做到这一点: -DAPP_VERSION = “$(GIT描述HEAD)”

但由于该项目是基于QMAKE,我想找到一种方法,把这个到Qt工程文件。 这可能吗?如果是这样,怎么样?

编辑: 我尝试添加以下内容:

QMAKE_CXXFLAGS + = -DAPP_VERSION = “$(GIT描述HEAD)”

但它只是给了我“-DAPP_VERSION =”,所以我想我必须使用一些转义字符,但我不知道哪些和地点。 :/

有帮助吗?

解决方案

问题解决了由于此链接: HTTP:// robertcarlsen达网络/博客/ 2009/01/06 / qmake的-xcode中蝽-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();
}

其他提示

您还可以使用

QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"$$system(git describe HEAD)\\\"

这将qmake的运行可能加快编译大型项目时执行的git命令只有一次。但是,你必须确保从仓库拉后运行qmakemake clean

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top