gpt4 book ai didi

c++ - qt在编译时生成包含git hash的头文件并使用文件强制重建

转载 作者:行者123 更新时间:2023-11-30 01:50:40 25 4
gpt4 key购买 nike

我想出了如何在编译时生成包含 git hash 的定义宏:

DEFINES += GIT_CURRENT_SHA1="\\\"$(shell git -C \""$$_PRO_FILE_PWD_"\" describe)\\\""

问题是当 git hash 改变时,使用 GIT_CURRENT_SHA1 的文件(mainwindow.cpp 正在向关于对话框添加文本)不会自动重建(显然)..

我想在编译时生成包含 git hash 的头文件,如const char *git_hash="git-hash-etc-etc";

我将把这个头文件包含在 mainwindow.cpp 中,并希望在头文件更改时重新编译它。

我的问题主要是要在.pro文件中添加什么才能从Makefile生成这样的文件?

谢谢。

最佳答案

只是为了证明我在 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

关于c++ - qt在编译时生成包含git hash的头文件并使用文件强制重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com