Sometimes it makes sense
to not rebuild a program,
even if a dependency file changes.
In this case,
you would tell SCons specifically
to ignore a dependency using the
Ignore
function as follows:
hello_obj=Object('hello.c') hello = Program(hello_obj) Ignore(hello_obj, 'hello.h')
%scons -Q hello
cc -c -o hello.o hello.c cc -o hello hello.o %scons -Q hello
scons: `hello' is up to date. %edit hello.h
[CHANGE THE CONTENTS OF hello.h] %scons -Q hello
scons: `hello' is up to date.
Now, the above example is a little contrived,
because it's hard to imagine a real-world situation
where you wouldn't want to rebuild hello
if the hello.h
file changed.
A more realistic example
might be if the hello
program is being built in a
directory that is shared between multiple systems
that have different copies of the
stdio.h
include file.
In that case,
SCons would notice the differences between
the different systems' copies of stdio.h
and would rebuild hello
each time you change systems.
You could avoid these rebuilds as follows:
hello = Program('hello.c', CPPPATH=['/usr/include']) Ignore(hello, '/usr/include/stdio.h')
Ignore
can also be used to prevent a generated file from being built
by default. This is due to the fact that directories depend on
their contents. So to ignore a generated file from the default build,
you specify that the directory should ignore the generated file.
Note that the file will still be built if the user specifically
requests the target on scons command line, or if the file is
a dependency of another file which is requested and/or is built
by default.
hello_obj=Object('hello.c') hello = Program(hello_obj) Ignore('.',[hello,hello_obj])
%scons -Q
scons: `.' is up to date. %scons -Q hello
cc -o hello.o -c hello.c cc -o hello hello.o %scons -Q hello
scons: `hello' is up to date.