如何在使用 SCons 时添加额外的干净目标

How to add extra clean targets while using SCons

我有一个分层构建,它使用 SConscript 递归地声明构建目标;所以我事先不知道目标。每个构建都会产生一些额外的文件,例如 *.err *.out,这些文件不在目标中。当我 运行 scons -c 时,这些文件将保持未清理状态。

当我 运行 scons -c 时,有没有办法清理这些文件?

一种方法是创建您自己的构建器,然后修改 emitter() 函数以包含那些可能的额外目标。

在我自己的项目中,我围绕 SWIG 工具创建了自己的构建器,因为当它执行时,我将生成的 .py 文件保存在与生成 .cpp 文件不同的目录中。所以默认的 scons -c 不会清理额外的 .py 文件。

所以对于你的情况,你会做这样的事情:

def emitter(target, source, env):
    # based on the target, create File nodes for the files that will
    # get generated as a side effect.

    target.append('%s.err' % target[0])
    target.append('%s.out' % target[0])

    return target, source

这是我的 SWIG 构建工具的 link:SwigGen.py

这会向环境对象添加一个新的构建器,这样我就可以:

env.SwigGen('module_wrapper.cpp', 'module.i')

当我执行 scons -c 时,创建的额外 'module.py' 也会被清理。