SCons 不会清除所有文件

2024-01-27

我有一个包含“builds”目录的文件系统,每个目录都包含一个名为“build-info.xml”的文件。然而,一些构建发生在构建脚本生成“build-info.xml”之前,因此在这种情况下,我有一个有点不平凡的 SCons SConstruct,用于生成骨架 build-info.xml,以便它可以用作对进一步规则的依赖。

即:对于每个目录:

  • 如果 build-info.xml 已经存在,则不执行任何操作。更重要的是,不要在“scons --clean”上删除它。
  • 如果 build-info.xml 不存在,generate相反,一个骨架 - build-info.xml 不依赖于任何其他文件 - 该骨架本质上是最小的默认值。
  • 在 --clean 期间,删除 build-info.xml(如果是)生成的,否则就这样吧。

我的 SConstruct 看起来像这样:

def generate_actions_BuildInfoXML(source, target, env, for_signature):
    cmd = "python '%s/bin/create-build-info-xml.py' --version $VERSION --path . --output ${TARGET.file}" % (Dir('#').abspath,)
    return cmd

bld = Builder(generator = generate_actions_BuildInfoXML, chdir = 1)
env.Append(BUILDERS = { "BuildInfoXML" : bld })

...

# VERSION = some arbitrary string, not important here
# path = filesystem path, set elsewhere
build_info_xml = "%s/build-info.xml" % (path,)
if not os.path.exists(build_info_xml):
    env.BuildInfoXML(build_info_xml, None, VERSION = build)

我的问题是“scons --clean”不会删除生成的 build-info.xml 文件。

我在“if”中尝试了 env.Clean(t, build_info_xml) 但我无法让它工作 - 主要是因为我无法弄清楚要分配给“t”的内容 - 我想要一个生成的构建信息。 xml 被无条件地清理,而不是基于另一个目标的清理,但我无法让它工作。

如果我在“if”之外尝试一个简单的 env.Clean(None, "build_info_xml") ,我发现 SCons 会清理每个 build-info.xml 文件,包括那些未生成的文件。也不好。

我想知道的是 SCons 如何确定哪些文件应该被清理,哪些不应该被清理。我使用生成器函数阻止 SCons 将此目标记录为 Clean 候选者的方式有什么有趣的吗?


好吧,我想我已经弄清楚发生了什么 - 我做了一个错误的假设,即 SCons 记录它创建的那些文件(作为目标),然后在后续的“清理”过程中使用这个记录的列表。这当然没有意义。

SCons 实际上所做的是重新运行所有依赖关系规则并创建一个新的依赖关系树。它用它来确定要清理哪些文件。因为我有 os.path.exists() 条件,这意味着 build-info.xml 从未添加到 Clean 列表中,因为它在运行 --clean 时始终存在。

事实证明 env.Clean()was正常工作,因为它会删除所有此类文件,仅仅是因为第二次运行时(使用 --clean) SCons 无法知道特定的 build-info.xml 文件已生成而不是已经存在。

解决这个问题的方法是在这些生成的文件旁边创建一个哨兵文件。但现在,我对 SCons 的 Clean 行为的新理解就足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SCons 不会清除所有文件 的相关文章

  • “cl”未被识别为内部或外部命令

    下面是我在 windows7 中运行 scons 编译器时的错误消息 cl is not recognized as an internal or external command operable program or batch fil
  • 当你调用一个包含yield的函数时会发生什么?

    I read here https stackoverflow com questions 19302530 python generator send function purpose 60042174 noredirect 1 comm
  • Rust 中的递归生成器导致“递归类型”错误;解决方法?

    我有一个以下形式的构造 pub enum Value Nil Str String Seq Vec
  • scons 知道 SConscript 文件位于哪个目录吗?

    我们正在评估 scons 作为构建系统 但我在适应我们的旧系统时遇到了问题 在我们的一些源代码子目录中 我们有一个 sources lib 文件 其中列出了需要编译以组装该目录的目标库的 C 文件的名称 但是 同一目录中还有其他 C 文件
  • Koa 发送响应后运行代码

    为了优化响应延迟 需要执行以下工作after响应已发送回客户端 但是 我似乎可以在发送响应后运行代码的唯一方法是使用setTimeout 有没有更好的办法 也许在发送响应后在某个地方插入代码 或者在某个地方异步运行代码 这是一些代码 koa
  • SCons 不会清除所有文件

    我有一个包含 builds 目录的文件系统 每个目录都包含一个名为 build info xml 的文件 然而 一些构建发生在构建脚本生成 build info xml 之前 因此在这种情况下 我有一个有点不平凡的 SCons SConst
  • raise StopIteration 和生成器中的 return 语句有什么区别?

    我很好奇使用之间的区别raise StopIteration and a return生成器中的语句 例如 这两个函数有什么区别吗 def my generator0 n for i in range n yield i if i gt 5
  • asyncio 中的“yield from”语法有什么作用以及它与“await”有何不同

    从编写过 asyncio 代码但希望更好地理解内部工作原理的人的角度来看 什么是yield from await这些对于允许异步代码有何用处 有一个高度评价 https stackoverflow com questions 9708902
  • Python 中旧式协程和新式协程的调用/返回协议有什么区别?

    我正在从旧式协程过渡 其中 yield 返回 send 提供的值 但是 本质上是生成器 到带有 async def 和 await 的新型协程 有几件事确实让我困惑 考虑以下旧式协程 它计算提供给的数字的运行平均值 它通过 发送 在每个点返
  • 告诉 SCons 不要自动创建目录?

    我正在尝试让 SCons 查看我需要的 git 存储库 并希望使该存储库保持最新 问题是我必须告诉它 git 存储库包含哪些文件才能在构建中使用它们 如果我这样做 SCons 将在尝试克隆存储库之前创建存储库 例如 假设我想克隆 GStre
  • 在其消费者中处理生成器异常

    这是后续处理生成器中抛出的异常 https stackoverflow com q 11366064 989121并讨论一个更普遍的问题 我有一个读取不同格式数据的函数 所有格式都是面向行或记录的 并且对于每种格式都有一个专用的解析函数 作
  • SCons 长命令行 TEMPFILE 与 MinGW

    我正在尝试在 Windows 上使用 SCons 和 MinGW 从 gcc 和 gfortran 对象构建共享库 但在最终链接期间命令行太长 超过 18000 个字符 我知道我需要使用临时文件 响应文件 来传递命令行 但我找不到让 SCo
  • ant+cpptasks 与 scons 与 make

    我正在调查scons http www scons org 我只是想确保在我将大量脑细胞投入到完全不同的事物之前我知道替代方案是什么 我过去一直在使用 GNU make 但从来没有对它感到特别满意 特别是 为什么 Ant 没有更频繁地用于
  • Scons:仅当目标发生更改时才生成版本文件

    我需要从 SCons 脚本生成 version cc 文件 仅当目标的任何源文件发生更改时才应生成此文件 假设 SCons 脚本有以下语句 python function which generates version cc in the
  • 如何覆盖 gem 中的 Rails 生成器模板?

    当您想要覆盖生成器模板 而不替换生成器本身 时 在 Rails 3 中 您只需将文件拖放到 lib templates 中适当命名的位置 Rails 就会找到它们 如果你想用宝石来做到这一点怎么办 我正在尝试采用我团队的标准化脚手架格式并将
  • 需要帮助调试缓慢的 scons 运行时

    我正在使用 scons 构建两个项目 一个项目效果很好 而另一个 更复杂 项目则非常令人沮丧 这是我在为第二个项目运行 scons 时看到的内容 S time scons scons Reading SConscript files lt
  • 如何解决 CheckLib 返回 false 的问题?

    Scons版本是2 3 3 这是构建脚本的相关部分 if not conf CheckLib portaudio raise Exception Did not find libportaudio a portaudio lib or th
  • python 3 打印生成器

    当我处理 print 函数 Python 3 时出现问题 当我寻找一系列的总和时 我可能会使用以下代码模式 gt gt gt sum i for i in range 101 但是当我倾向于检查我制作的系列时 我选择 print 并假设它会
  • 高效生成所有小于 N 的合数(及其因式分解)

    我想构建一个高效的 Python 迭代器 生成器 它会产生 所有小于 N 的合数 连同他们的质因数分解 我将其称为 composites with factors 假设我们已经有小于 N 的素数列表 或者可以执行相同操作的素数生成器 请注意
  • NotImplementedError:尚未为未构建的模型子类启用“fit_generator”

    我正在使用以下代码 import tensorflow as tf traindata tf keras preprocessing image ImageDataGenerator rescale 1 255 shear range 0

随机推荐

  • Xml - 使用Python按标签查找元素[重复]

    这个问题在这里已经有答案了 我正在尝试从一堆 xml 文件中提取一些数据 现在的问题是所有文件的结构并不完全相同 因此 仅迭代子文件并提取值是很困难的 有没有getElementByTag python 处理此类 xml 文档的方法 我发现
  • MATLAB 中的统计异常值检测

    假设我们有这个矩阵 main 10000 5 3 1 5 5677 0 134 1 1 456 3 该方法是计量经济学和统计问题中使用最广泛的方法 X是我们正在寻找异常值的数据 X mean X gt n std X 因此 如果这个不等式成
  • 仅在启动时无法找到运行时版本?

    我有一个非常简单的控制台应用程序 只是一个Console Write 来测试一些启动功能 我将其放在 Window 7 的启动文件夹中 但当它运行时 我收到 无法找到运行此应用程序的运行时版本 奇怪的是 如果我进入启动文件夹并实际运行该程序
  • 如何在keras批量更新期间缩放梯度?

    我正在使用标准 keras 模型 并且正在批量训练 使用train on batch功能 现在 我想获取批次中每个元素的梯度并对其进行缩放 将每个样本梯度与我拥有的样本特定值相乘 并且在缩放每个梯度后 可以将其求和并用于更新现有权重 无论如
  • HTML 输入 type="password" 的 Windows 批处理等效项是什么?

    我需要在 Windows 脚本中从用户那里获取身份验证凭据 但采用经典的 第一个 Google 结果 方法 SET P USR Username SET P PWD Password 不太令人满意 所以我想知道是否有一个 等价物 HTML
  • 帮我解决我的 JavaScript 测验 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我已经参加这个测验很多年了 只是无法
  • 从 std::vector 中连续擦除的安全方法?

    我认为下面的代码可以工作 但是当目标小部件位于向量末尾时它会崩溃 for std vector
  • 试图推迟我的部分计划

    我试图拍摄我打开的网页的快照 但我需要延迟代码的第二部分 以便程序有时间打开页面 这是代码 import os import sys import time import Image import ImageGrab import webb
  • MSBuild - 它可以计算出解决方案文件中的项目依赖关系吗?如果是这样怎么办?

    我有一个 msbuild 项目 它从 Visual Studio 构建一个 SLN 文件 其中包含所有项目 大约 70 多个项目 并且许多项目相互依赖 这意味着它们需要按顺序构建 有时开发人员会忘记在解决方案文件中的 Visual Stud
  • javascript 中函数声明后的冒号[重复]

    这个问题在这里已经有答案了 我正在查看 Vue js 的源代码 在几乎所有的函数声明中 我找到了一种定义函数的新方法 function isStringStart chr number boolean return chr 0x22 chr
  • 如何在leiningen项目中打包资源

    在示例项目中 https github com technomancy leiningen blob master sample project clj https github com technomancy leiningen blob
  • Anaconda提示加载错误:输入行太长

    我在 Windows 7 64 位版本上安装了 Anaconda 64 python 2 7 安装后 anaconda提示符可以正常启动 但是每当我重新启动 关闭并重新启动笔记本电脑时 anaconda提示符都会显示以下错误消息 并且某些p
  • 自动镜像 GitHub 存储库

    我怀疑这个问题以前曾被问过 尽管我能找到的都是相似但不同的问题 或者是相同的问题 但只有不适合我的解决方案 GitHub 上有一个我无法控制但想要镜像的存储库 对于镜像 我的意思是拥有一个自动更新的克隆 我希望这个镜像也能出现在 GitHu
  • 当使用 PHP 选择值“other”时,如何显示 HTML 输入字段

    我想弄清楚的是如何拥有一个 htmlinput当值为other从下拉菜单中选择 现在 下拉列表的值来自 MySQL DB 查询的结果 该查询有效 但我似乎无法弄清楚当我选择其他选项时如何显示输入 query mysql query SELE
  • Visual Studio 2015 + Xamarin + 本机便携式 PCL + WCF

    因此 我们的企业正在使用 Visual Studio 走 Xamarin 路线 浏览所有在线文档表明 从 Web 服务创建 WCF 代理客户端并将其放置在 PCL 中应该很简单 经过一番努力并试图找出为什么我无法使用 SLSVcUtil e
  • JavaScript使用变量的基本功能

    我目前正在 Codecademy 上学习 JavaScript 在那里 它给出了一个基本变量的示例 var divideByThree function number var val number 3 console log val 然而
  • C# 使用反射时确定 Nullable 属性 DateTime 类型

    我有一个关于如何确定对象的 Nullable 属性类型的问题 ObjectA有财产DateTime CreateDate 当我像下面的代码一样迭代它的属性时 如何检查属性是否是Nullable DateTime type foreach P
  • 在 PowerShell v3 中运行并行 Invoke-WebRequest 作业

    在 PowerShell 中运行同步后台作业非常简单 但我似乎无法让它与新的 v3 中 cmdlet Invoke WebRequest 一起使用 我正在通过 PowerShell 以脚本方式下载数千个文件 效果很好 但串联起来需要几天时间
  • 将计算列转换为常规列

    我在 SQL Server 2005 的一个大表中有一个持久计算列 我想将其转换为常规列 保留当前值 我是否必须重新创建列并更新事务中的整个表 或者是否可以仅更改计算列规范 以及如何操作 Create a new Column unpers
  • SCons 不会清除所有文件

    我有一个包含 builds 目录的文件系统 每个目录都包含一个名为 build info xml 的文件 然而 一些构建发生在构建脚本生成 build info xml 之前 因此在这种情况下 我有一个有点不平凡的 SCons SConst