build - 如何在构建时在介子中运行自定义命令?

标签 build embedded cross-compiling meson-build

在我的项目中,我采用了遵循 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/

相关文章:

c++ - scons:对象、源代码、可执行文件,都在单独的目录中

linux - gettext 编译在 cygwin 上的 crosstool-ng 构建中失败

c - 当相同的代码部分被项目模块/代码文件的大部分使用/执行时,设计解决方案分布在不同的体系结构级别

c - Linux录像机最高效的文件写入方法

c - 在进行函数调用之前强制函数恢复所有寄存器

将 C 编译成 MIPS

linux - 如何修复../libcrypto.so : undefined reference to `rc4_md5_enc' ?

Android重新打包通过ant debug然后ant release

java - SWT 应用程序从 Eclipse IDE 运行,当我通过 Maven 创建 jar 并运行时不运行。给出 UnsatisfiedlinkException

ubuntu - 试图包含一个库,但不断收到 'undefined reference to' 消息