nay*_*ana 3 c++ git qt makefile
我需要获取有关在编译时使用的git commit(打印出来并在我的About对话框中使用)的信息(make,而不是qmake)。为此可以使用git describe命令。我需要的解决方案是多平台的(至少是Windows Linux),我设法在Windows和Linux上运行的qnake上成功获取git hash。
此命令在qmake运行时执行,效果很好:
DEFINES += GIT_CURRENT_SHA1=$(shell git describe)
Run Code Online (Sandbox Code Playgroud)
但是我需要在编译时执行git describe,因为qmake并非在每次编译时都运行,因此会有旧的提交哈希。
如果我将此代码添加到由qmake生成的Makefile中,则可以正常工作,但是在运行qmake之后当然消失了:
VARIABLE = $(shell cd ../../project/ ; git describe)
DEFINES = -DGIT_CURRENT_SHA1=$(VARIABLE)
Run Code Online (Sandbox Code Playgroud)
而且由于阴影构建不在git存储库目录内,因此存在如何获取正确路径的问题。我需要CD进行投影,然后从那里运行git describe。
因此,有两个子问题:
还是有人知道更好的东西?
谢谢
更新1
好的,我发现了如何将Shell代码插入Makefile定义变量中,并且需要在其周围加上引号:
DEFINES += GIT_CURRENT_SHA1="$(shell cd ../../project/ ; git describe)"
Run Code Online (Sandbox Code Playgroud)
但是问题是如何将项目路径传递到其中(由于阴影生成等)
更新2
好的,还找出了该怎么做。
DEFINES += GIT_CURRENT_SHA1="$(shell git -C \""$$_PRO_FILE_PWD_"\" describe)"
Run Code Online (Sandbox Code Playgroud)
但是有一个大问题-如何强制重建使用GIT_CURRENT_SHA1宏的文件? 我正在考虑每次都必须生成一些额外的头文件,并将其包含在需要的地方。
好的,看来一段时间后我找到了解决方案。只需将其添加到Qt .pro文件中的定义即可。
DEFINES += GIT_CURRENT_SHA1="\\\"$(shell git -C \""$$_PRO_FILE_PWD_"\" describe)\\\""
Run Code Online (Sandbox Code Playgroud)
构建生成的Makefile时将刷新此定义。无需每次都运行qmake。
用法简单:
label->setText(QString("Version: %1").arg(GIT_CURRENT_SHA1));
Run Code Online (Sandbox Code Playgroud)
但是存在一个问题,即当git hash更改时,那些使用GIT_CURRENT_SHA1宏中的值的文件将不会自动重建。
| 归档时间: |
|
| 查看次数: |
2237 次 |
| 最近记录: |