【问题标题】:How to put validation logic as dependency on SCONS target如何将验证逻辑作为对 SCONS 目标的依赖
【发布时间】:2021-01-23 12:50:12
【问题描述】:

我对 SCONS 上的构建过程有一个简单但不明显的要求。

我需要输入以下命令:

scons release [version]

预期结果

这应该做的是:

  1. 激活一个名为 release 的目标。
  2. 捕获释放参数后不久传递的参数。
  3. 作为目标的一部分,执行一个函数。如果释放目标后传递的参数有效,则调用另一个目标。
  4. 如果无效,请中断工作流并显示错误消息。

问题

我不知道如何设置它

我目前的假设是:

  1. 使用两个操作创建自定义构建器。
  2. 第一个动作应该是一个 python 函数,它能够以某种方式停止进程,以防其逻辑如此决定。
  3. 第二个操作应该调用默认构建器,因为如果第一个操作决定可以继续,则应该执行默认构建器。
  4. 创建一个指向这个名为 release 的自定义构建器的目标。

我需要做的是创建一个工作流,其中一些逻辑作为目标的一部分执行,并决定是否应该执行另一个逻辑。

但我不知道按照我的想法是否可行,并且我错过了一些我不知道从哪里获得的知识:

  1. “发布”目标不是输入文件。相反,它是执行由不同操作组成的工作流的触发器。如何告诉 SCONS “release”参数不是文件?
  2. 如何捕获在“release”参数之后输入的下一个参数?这是发布号,“发布”目标应使用它来验证内容。 Pseldocode 将是:
def releaseTarget(wantedRelease):
  if wantedTarget == "":
    interruptHere()
  1. 如何中断工作流,防止下一个动作被执行?
  2. 如何将默认操作链接为工作流中的下一个操作?

我想知道我应该从哪里开始在 scons 上寻找这种功能。

【问题讨论】:

    标签: python scons


    【解决方案1】:

    SCons 的方法是使用变量。这将导致调用为:

    scons release VERSION=1.2.3
    

    SCons 文档here 中介绍了变量:

    对于release,您可以使用Alias 文档here

    如果您打算使用 SCons 做任何琐碎的事情,可能值得彻底阅读用户指南和手册页。

    另外,请加入我们的 discord 服务器寻求帮助,或用户邮件列表,或 IRC 频道详细信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多