¿Cómo puedo pasar la salida de un comando como indicador del compilador a través de un archivo de proyecto Qt?
-
21-08-2019 - |
Pregunta
Estoy intentando agregar la salida de "git describe" a la ventana Acerca de de mi aplicación, para que sea más fácil saber qué versión de la aplicación usa la gente.
Puedo hacerlo agregando el siguiente indicador del compilador:-DAPP_VERSION="$(git describe HEAD)"
Pero como el proyecto se basa en qmake, me gustaría encontrar una manera de colocarlo en el archivo del proyecto Qt.es posible?Y si es así, ¿cómo?
editar:Intenté agregar lo siguiente:
QMAKE_CXXFLAGS += -DAPP_VERSION="$(git describe HEAD)"
Pero solo me dio "-DAPP_VERSION=", así que supongo que tengo que usar algunos caracteres de escape, pero no sé cuáles ni dónde.:/
Solución
problema resuelto gracias a este enlace: http: // robertcarlsen .net / blog / 2009/01/06 / qmake-Xcode-bug-258
Aquí hay un proyecto qt muestra utilicé para probarlo: 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();
}
Otros consejos
También puedes usar
QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"$$system(git describe HEAD)\\\"
Esto ejecutará el comando git solo una vez durante la ejecución de qmake, lo que podría acelerar la compilación para proyectos grandes.Sin embargo, debes asegurarte de ejecutar qmake
y make clean
después de sacarlo del repositorio.