介子和 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}
)
我需要向使用 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}
)