首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试GN元构建中是否存在文件。

测试GN元构建中是否存在文件。
EN

Stack Overflow用户
提问于 2021-07-19 13:03:42
回答 1查看 150关注 0票数 0

关于行动投入的GN参考

对于动作和action_foreach目标,输入应该是脚本的输入,不会有变化。这些应该是脚本通过导入使用的所有.py文件(主脚本本身将是操作的隐式依赖,因此不需要列出)。 对于操作目标,输入和源是相同的,但从样式的角度来看,建议遵循与action_foreach相同的规则,并将助手文件放在输入中,以及脚本(如果有的话)在源中使用的数据。 请注意,声明操作中的输入依赖项的另一种方法是让该操作编写一个help文件(请参阅“dependencies”)。这允许脚本动态地编写输入依赖项,在实际执行脚本之前可能不知道这些依赖项。这比在运行GN来确定输入时进行处理更有效,并且比硬编码列表更容易保持同步。

在我的例子中,有一个输入是可选的,所以我只想在它存在的情况下将它添加到列表中。我看不出有什么方法可以在GN中测试这一点。我可以使用解文件,但这是唯一的选择吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-06 15:55:28

构建args是一种解决方案,如果调用GN的任何内容都“知道”是否存在可选的输入文件:

BUILD.gn

代码语言:javascript
复制
declare_args() {
  have_some_optional_input_file = false
}

action("my_action") {
  inputs = [ ... ] # list of your required inputs
  if (have_some_optional_input_file) {
    inputs += [ "my_optional_input.whatever" ]
  }
  ...
}

如果它是真正不可知的,总是有exec_script“逃逸舱口”:脚本

这允许您在配置时运行任意脚本,GN将解析输出,就像您直接将其写入BUILd.gn文件一样。

由于GN需要知道每个构建的确切输入,所以可以这样做:

BUILD.gn

代码语言:javascript
复制
action("my_action") {
  inputs = [ ... ] + exec_script("find_optional_inputs.py", [], "list lines")
}

编写您的find_optional_inputs.py,以便它返回一个以换行符分隔的列表,其中包含您希望它添加到输入集中的所有文件。

不过,您的exec_script语句在每次调用GN时都会运行,即使它只是用于descls这样的非变异子命令。此外,如果您的脚本在模板中,它将在每个实例化中运行一次。您的脚本还将在引用它的每个工具链上运行一次。您可以将--time参数添加到GN本身,以查看它需要多长时间,因此至少可以监视它!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68440970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档