我在编译每个文件后生成了一些日志文件。
我通过使用附加到我正用于编译该文件的构建器的发射器来让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方式”解决此问题的最佳方法是什么?
答案 0 :(得分:1)
尝试使用env.SideEffect()而不是忽略:
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可能会在清理目录时删除 它存在。)如果你想确保side_effect被清理 无论何时清理特定目标,都必须指定此目标 明确使用Clean或env.Clean函数。