gpt4 book ai didi

versioning - 介子项目版本可以动态分配吗?

转载 作者:行者123 更新时间:2023-12-03 17:01:52 24 4
gpt4 key购买 nike

我是 Meson 的新手,所以如果这是一个愚蠢的问题,请原谅我。
问题的简单版本:
我希望能够在构建时为介子项目版本分配动态版本号。本质上meson.project_version()=my_dynamic_varproject( 'my_cool_project', 'c', version : my_dynamic_var') (这当然行不通)。
如果不需要,我宁愿不预处理文件。
如果有人关心,请提供一些背景信息:
我的构建系统会动态提供项目的版本号。就我而言,它使用的是 bash 脚本。我可以使用 run_command 将该版本放入我的顶级 meson.build 文件中。和刮 标准输出 从那里。我读过使用这种方式是不好的形式所以如果有另一种方式来做到这一点..我全神贯注。
我还能够创建并传递正确的 -DPRODUCT_VERSION="<my_dynamic_var>"通过add_global_arguments,所以我可以满足于此..但我希望介子项目本身携带相同版本的日志,因此我可以使用 meson.project_version() 获取 c/c++ 以外语言的子项目中的版本。

最佳答案

正如对该问题的评论所指出的,简短的答案似乎是 .在 project 中没有直接动态设置版本的方法。称呼。

但是,有一些变通方法,对于简单的情况,第一个看起来很有希望:

(1) 使用介子rewriting capability

$ meson rewrite kwargs set project / version 1.0.0

然后显然使用环境变量而不是 1.0.0 .

(2) 编写一个包装脚本,从环境中读取版本并将其替换到您的 meson.build 中。 project 中的文件称呼。

(3) 采用 conan.io 并生成您的介子文件。

(4) 使用构建选项。此选项虽然不如 (1) 好,但可能适用于其他工作流程。

以下是选项 (4) 的工作原理。
  • 创建 meson_options.txt介子根目录中的文件
  • 添加以下行:
    option('version', type : 'string', value : '0.0.0', description : 'project version')
  • 然后创建一个 meson.build读取此选项的文件。
    project('my_proj', 'cpp')
    version = get_option('version')
    message(version)

    conf_data = configuration_data()
    conf_data.set('version', version)

  • 当你去生成你的项目时,你有一个额外的步骤来设置选项。
    $ meson build && cd build
    $ meson configure -Dversion=$BUILD_VERSION

    现在该版本可用作构建选项,然后我们使用 configuration_data对象使其可用于替换头文件/源文件(您可能希望将其放入共享库或其他文件)。
    configure_file(
    input : 'config.hpp.in',
    output : 'config.hpp',
    configuration : conf_data
    )

    config.hpp.in看起来像这样:
    #pragma once
    #include <string>

    const static std::string VERSION = "@version@";

    当我们做 configure_file调用, @version@将替换我们在 meson configure 中设置的版本字符串步。

    所以这种方式非常复杂,但就像我说的,你最终可能仍然会做一些事情,例如打印版权信息,什么不打印。

    关于versioning - 介子项目版本可以动态分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59201214/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com