【问题标题】:SCons Ignore function not workingSCons忽略功能不起作用
【发布时间】:2016-04-05 03:06:50
【问题描述】:

每个文件编译后都会生成一些日志文件。

我通过使用附加到我用来编译该文件的构建器的发射器让 SCons 了解这些文件。

不幸的是,因为我在每次构建 SCons 重新编译源文件后删除了空日志文件,因为日志文件丢失了。

我想使用 SCons Ignore 函数忽略这些“副作用”文件。

在我的发射器中,我正在做这样的事情:

def compiler_emitter(target, source, env):
target.append(env.File(source[0].name.split('.')[0] + env['ERRSUFFIX']))    
env.Ignore(source[0], target[1])    
return target, source

作为说明,我总是只将一个文件传递给我的构建器。

在我的情况下,忽略功能不起作用。

以“SCons 方式”解决此问题的最佳方法是什么?

【问题讨论】:

  • 我不明白你为什么先在发射器中添加额外的日志/错误文件,然后又想“忽略”它们。如果它们对您的构建不重要,请不要将它们告诉 Emitter。这至少是我的方法......

标签: scons


【解决方案1】:

尝试使用 env.SideEffect() 而不是 Ignore:

SideEffect(side_effect, target) , env.SideEffect(side_effect, target)

将 side_effect 声明为构建目标的副作用。两个都 side_effect 和 target 可以是列表、文件名或节点。在旁边 effect 是作为副作用创建或更新的目标文件 建立其他目标。例如,一个 Windows PDB 文件被创建为 为静态库构建 .obj 文件的副作用,以及 各种日志文件被创建更新为各种 TeX 的副作用 命令。如果目标是多个构建命令的副作用, scons 将确保一次只执行一组命令。 因此,您只需将此方法用于副作用目标 由于多个构建命令而构建的。

因为多个构建命令可能会更新同一个副作用文件, 默认情况下,side_effect 目标不会自动删除 目标由 -c 选项删除。 (但请注意, side_effect 可能会作为清理目录的一部分被删除 它活着。)如果你想确保清理副作用 每当清理特定目标时,您必须指定此 明确地使用 Clean 或 env.Clean 函数。

http://scons.org/doc/production/HTML/scons-man.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多