如何在使用 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' 也会被清理。
我有一个分层构建,它使用 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' 也会被清理。