Как передать вывод команды в качестве флага компилятора через файл проекта Qt?
-
21-08-2019 - |
Вопрос
Я пытаюсь добавить вывод «git описать» в окно «О программе» моего приложения, чтобы было легче узнать, какую версию приложения используют люди.
Я могу сделать это, добавив следующий флаг компилятора:-DAPP_VERSION="$(git описывает HEAD)"
Но поскольку проект основан на qmake, мне хотелось бы найти способ поместить это в файл проекта Qt.Это возможно?И если да, то как?
редактировать:Я попробовал добавить следующее:
QMAKE_CXXFLAGS += -DAPP_VERSION="$(git описать HEAD)"
Но он просто дал мне "-DAPP_VERSION=", так что я полагаю, мне придется использовать некоторые escape-символы, но я не знаю, какие и где.:/
Решение
Проблема решена благодаря этой ссылке: 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();
}
Другие советы
Вы также можете использовать
QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"$$system(git describe HEAD)\\\"
При этом команда git будет выполняться только один раз во время выполнения qmake, что может ускорить компиляцию больших проектов.Однако вы должны обязательно запустить qmake
и make clean
после извлечения из репозитория.