2009-05-12 10 views
2

내 응용 프로그램의 about 창에 "git describe"의 출력을 추가하려고하므로 사람들이 사용하는 응용 프로그램의 버전을 쉽게 찾을 수 있습니다.Qt 프로젝트 파일을 통해 컴파일러 플래그로 명령 출력을 전달할 수 있습니까?

나는 다음과 같은 컴파일러 플래그를 추가하여 작업을 수행 할 수 있습니다 -DAPP_VERSION =

을 "$이 (자식이 HEAD를 설명)"그러나 프로젝트가 qmake를 기반으로하기 때문에, 나는이를 넣어하는 방법을 찾을 싶습니다 Qt 프로젝트 파일에 저장하십시오. 이것이 가능합니까? 그렇다면 어떻게?

편집 : 나는 다음과 같은 추가하는 시도 :

QMAKE_CXXFLAGS + = -DAPP_VERSION = "$ (자식 설명 HEAD)"

을하지만 그것은 단지 내게 준 "-DAPP_VERSION을 =", 그래서 내가 가정하자 일부 이스케이프 문자를 사용해야하지만, 어떤 문자가 어디인지는 알지 못합니다. : /이 링크

답변

5

문제 해결 감사 : 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(); 
} 
http://robertcarlsen.net/blog/2009/01/06/qmake-xcode-bug-258

여기에 내가 그것을 테스트하는 데 사용되는 샘플 QT 프로젝트입니다

+0

위와 동일한 문제는 http://stackoverflow.com/a/12368268/1959808 –

+0

과 다를까요? 분기를 전환하고 qt.pro와 qt.cpp가 변경되지 않으면 다시 컴파일되지 않습니다 ... 다른 브랜치는 다른 파일에서도 변경 될 수 있습니다 (다른 해시도 있음) – mBardos

1

사용할 수도 있습니다

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

큰 프로젝트의 컴파일 속도를 높이는 qmake 실행 중에 git 명령을 한 번만 실행합니다. 그러나 저장소에서 가져온 후에 qmakemake clean을 실행해야합니다.

+0

변경 사항 (예 : 더티)은 쉽게 누락됩니다. –

+0

이 기능은 다른 사용자에게 제공되는 빌드에 필수적입니다. 이 경우, 트리가 더럽지 않고 전체 빌드가 완료되었는지 확인하는 빌드 스크립트 (qmake 실행 포함)가 있어야합니다. –