From 84c6f9729dbbc175431874957d0654310410bd6f Mon Sep 17 00:00:00 2001 From: Luca Falavigna Date: Thu, 10 Feb 2011 23:18:10 +0100 Subject: Imported Upstream version 2.0.1 --- doc/user/tasks.xml | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'doc/user/tasks.xml') diff --git a/doc/user/tasks.xml b/doc/user/tasks.xml index 2945d1c..2b2eb0b 100644 --- a/doc/user/tasks.xml +++ b/doc/user/tasks.xml @@ -29,7 +29,7 @@ on as they become more complex. Most build tools have special purpose constructs for performing these tasks, but since &SConscript; files are &Python; scripts, you can use more flexible built-in &Python; services to perform these tasks. This appendix lists a number of these -tasks and how to implement them in &Python;. +tasks and how to implement them in &Python; and &SCons;. @@ -79,3 +79,59 @@ output output = os.popen(command).read() + + +Generating source code: how code can be generated and used by SCons + + + +The Copy builders here could be any arbitrary shell or python function +that produces one or more files. This example shows how to create +those files and use them in &SCons;. + + + + +#### SConstruct +env = Environment() +env.Append(CPPPATH = "#") + +## Header example +env.Append(BUILDERS = + {'Copy1' : Builder(action = 'cat < $SOURCE > $TARGET', + suffix='.h', src_suffix='.bar')}) +env.Copy1('test.bar') # produces test.h from test.bar. +env.Program('app','main.cpp') # indirectly depends on test.bar + +## Source file example +env.Append(BUILDERS = + {'Copy2' : Builder(action = 'cat < $SOURCE > $TARGET', + suffix='.cpp', src_suffix='.bar2')}) +foo = env.Copy2('foo.bar2') # produces foo.cpp from foo.bar2. +env.Program('app2',['main2.cpp'] + foo) # compiles main2.cpp and foo.cpp into app2. + + + + +Where main.cpp looks like this: + + + + + +#include "test.h" + + + +produces this: + + + + % scons -Q + cc -o app main.cpp + cat < foo.bar2 > foo.cpp + cc -o app2 main2.cpp foo.cpp + cat < test.bar > test.h + + + -- cgit v1.2.3