我想出了如何在编译时生成包含git hash的define宏:
DEFINES += GIT_CURRENT_SHA1="\\\"$(shell git -C \""$$_PRO_FILE_PWD_"\" describe)\\\""
问题是当更改git哈希时,使用GIT_CURRENT_SHA1的文件(mainwindow.cpp正在添加关于对话框的文本)不会自动重建(显然)..
我想在编译时生成包含git hash的头文件 const char * git_hash =“git-hash-etc-etc”;
这个头文件我将包含在mainwindow.cpp中,并希望在标题更改时重新编译它。
我的问题主要是要添加到.pro文件中以从Makefile生成这样的文件?
感谢。
答案 0 :(得分:3)
仅仅是为了证明我在Linux上用于git版本的脚本:
#!/bin/bash
echo "Generating header for git hash" $1 $2
GIT_HEADER="$1/$2"
if [ -z "$2" ]; then
GIT_HEADER="$1/git_version.h"
fi
GIT_VERSION="`git -C \"$1\" describe`"
if grep --quiet $GIT_VERSION $GIT_HEADER; then
echo "No need to generate new $GIT_HEADER - git hash is unchanged"
exit 0;
fi
echo "git version is:" $GIT_VERSION
echo "#ifndef GIT_VERSION_H" > $GIT_HEADER
echo "#define GIT_VERSION_H" >> $GIT_HEADER
echo "" >> $GIT_HEADER
echo "#define GIT_CURRENT_SHA1 \"$GIT_VERSION\"" >> $GIT_HEADER
echo "#endif //GIT_VERSION_H" >> $GIT_HEADER
echo "file is generated into" $GIT_HEADER
在.pro:
GITVERSION = git_version.h
versiontarget.target = $$GITVERSION
versiontarget.commands = '$$PWD/git_version.sh \"$$PWD\" $$GITVERSION'
versiontarget.depends = FORCE
PRE_TARGETDEPS += $$GITVERSION
QMAKE_EXTRA_TARGETS += versiontarget
答案 1 :(得分:1)
我们在.pro文件中添加了命令,用于调用批处理文件,使用当前的svn-version创建头文件:
的.pro:
SVNVERSION = Main/svnversion.h
versiontarget.target = $$SVNVERSION
versiontarget.commands = '$$PWD/svnversion.bat $$PWD'
versiontarget.depends = FORCE
PRE_TARGETDEPS += $$SVNVERSION
QMAKE_EXTRA_TARGETS += versiontarget
SOURCES += ... \
Main/svnversion.h
创建了头文件:
#ifndef SVNVERSION_H
#define SVNVERSION_H
#define SVN_VERSION 2763
#endif // SVNVERSION_H
批处理文件:
@echo off
set OLDDIR=%CD%
cd %1
echo old %OLDDIR% arg %1
echo SVN Version: Begin
svn.exe info > svnversion.tmp
if %ERRORLEVEL% == 0 (
echo SVN Version: Insert
svn info | findstr /B "Revision: " > svnversion.tmp
FOR /F "tokens=2 delims= " %%G IN (svnversion.tmp) DO (
echo #ifndef SVNVERSION_H > Main\svnversion.h
echo #define SVNVERSION_H >> Main\svnversion.h
echo. >> Main\svnversion.h
echo #define SVN_VERSION %%G >> Main\svnversion.h
echo. >> Main\svnversion.h
echo #endif // SVNVERSION_H >> Main\svnversion.h
)
) else (
echo SVN Version: Default
echo #ifndef SVNVERSION_H > Main\svnversion.h
echo #define SVNVERSION_H >> Main\svnversion.h
echo. >> Main\svnversion.h
echo #define SVN_VERSION -1 >> Main\svnversion.h
echo. >> Main\svnversion.h
echo #endif // SVNVERSION_H >> Main\svnversion.h
)
cd %OLDDIR%
echo SVN Version: Finish