介子和 git 信息

meson and git information

我需要向使用 meson 构建系统构建的二进制文件提供一些 git 有关所用分支和版本的信息:

git describe --tags
git descibe --help

我的问题是如何用介子检索这些信息,

对于 make build,我使用以下指令:

GITREF = $(shell git describe --all)
LIB1_VER = $(shell cd ../../lib1;git describe --tags;cd - &>NULL)

所以在 GITREF 的介子中我试过了

info_dep = vcs_tag(command : ['git descibe --all'],
            input : 'infoBuild.h.in',
            output : 'infoBuild.h',
            replace_string : 'BRANCHNAME')

其中 infobuild.h.in 是:

#define GITREF "BRANCHNAME"

但是当我用 ninja 编译时我得到了

 /usr/local/bin/meson --internal vcstagger ../../src/prog1/info/infoBuild.h.in src/prog1/info/infoBuild.h 1.1.0 /home/mariano/clonesIntel/projMes/src/prog1/info BRANCHNAME '(.*)' '/home/mariano/clonesIntel/ProjMes/src/prog1/info/git describe --all'

但我没有找到任何 infoBuild.h, LIB1_VER 更难,因为它位于外部文件夹中, 我可以用 bash 脚本解决这个问题,但是有没有办法在介子构建中检索这两个信息?

我看到一个紧迫的问题,它会尝试 运行 命令 'git describe --all',这不是你想要的,因为介子一定会逃避你的 [=] 中的空格22=] 以便它将其视为单个文件名,您需要 ['git', 'describe', '--all']。当然,这可能只是您示例中的一种类型。

您可能会考虑的一个选项是 run_command 和 configure_file,它们是编译时的命令 运行,并生成一个结果对象,您可以从中获取字符串值。与 vcs_tag(或 custom_target)相比,它的缺点是它发生在配置时,而不是构建时,因此您需要重新配置以更新您的标签:

res = run_command(['git', 'describe', '--all'], capture : true, check : true)
describe = res.stdout()

version_h = configure_file(
  input : 'version.h.in',
  output : 'version.h',
  configuration : {'PLACEHOLDER' : describe}
)