Search code examples
scons

SCons Ignore function not working


I have some log files generated after each file is compiled.

I am making SCons aware of these files by using an emitter attached to the builder that I'm using to compile that file.

Unfortunately, because I am deleting the empty log files after each build SCons recompiles the source files because the log files are missing.

I would like to ignore these 'side effect' files using SCons Ignore function.

In my emitter I am doing something like this:

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

As a note I always pass only one file to my builder.

In my case Ignore function is not working.

What will be the best approach to solve this problem in a 'SCons way' ?


Solution

  • Try using env.SideEffect() instead of Ignore:

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

    Declares side_effect as a side effect of building target. Both side_effect and target can be a list, a file name, or a node. A side effect is a target file that is created or updated as a side effect of building other targets. For example, a Windows PDB file is created as a side effect of building the .obj files for a static library, and various log files are created updated as side effects of various TeX commands. If a target is a side effect of multiple build commands, scons will ensure that only one set of commands is executed at a time. Consequently, you only need to use this method for side-effect targets that are built as a result of multiple build commands.

    Because multiple build commands may update the same side effect file, by default the side_effect target is not automatically removed when the target is removed by the -c option. (Note, however, that the side_effect might be removed as part of cleaning the directory in which it lives.) If you want to make sure the side_effect is cleaned whenever a specific target is cleaned, you must specify this explicitly with the Clean or env.Clean function.

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