在我的项目中,我采用了遵循 semver 描述的标准的语义版本控制方案。 .我得到了这样的东西:product_v1.2.3-alpha-dirty.elf。
我使用嵌入式系统和 make 我通常在编译时生成一个 version_autogen.h 文件,其中包含版本号的信息,例如 1.4.3.1 和当前的 git 存储库,例如 --dirty、--clean 和依此类推,使用 shell 命令。
我开始使用介子,它非常简单灵活,但自定义命令如
run_command('command', 'arg1', 'arg2', 'arg3')
仅在配置时可用,而我在编译时需要它们来检索 git status 等信息。
我该怎么做?
最佳答案
经过更深入的研究,我发现 custom_target()(如 nielsdg 所建议的那样)可以完成我的工作。我做了这样的事情:
# versioning
version_autogen_h = custom_target(
'version_autogen.h',
output : 'version_autogen.h',
input : 'version_creator.sh',
command : ['@INPUT@', '0', '0', '1', 'alpha.1', '@OUTPUT@' ],
)
version_creator.sh
是我的 bash 脚本,它检索 git 信息并根据作为命令参数传递的版本号创建文件 version_autogen.h
。自定义目标是在编译时创建的,因此我的脚本也在编译时执行,恰好在我希望的时候执行。
我还发现,在介子中有可能使用生成器来做类似的事情,但在那种情况下,它们转换一个输入文件为一个或多个输出文件,所以它们不适合我不需要文件作为输入而只需要版本号的情况。
关于build - 如何在构建时在介子中运行自定义命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65390930/