In this chapter, you will see several examples of very simple build configurations using SCons, which will demonstrate how easy it is to use SCons to build programs from several different programming languages on different types of systems.
Here's the famous "Hello, World!" program in C:
int main() { printf("Hello, world!\n"); }
And here's how to build it using SCons. Enter the following into a file named SConstruct:
Program('hello.c')
This minimal configuration file gives
SCons two pieces of information:
what you want to build
(an executable program),
and the input file from
which you want it built
(the hello.c file).
Program
is a builder_method,
a Python call that tells SCons that you want to build an
executable program.
That's it. Now run the scons command to build the program. On a POSIX-compliant system like Linux or UNIX, you'll see something like:
% scons scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... cc -o hello.o -c hello.c cc -o hello hello.o scons: done building targets.
On a Windows system with the Microsoft Visual C++ compiler, you'll see something like:
C:\>scons scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... cl /Fohello.obj /c hello.c /nologo link /nologo /OUT:hello.exe hello.obj embedManifestExeCheck(target, source, env) scons: done building targets.
First, notice that you only need to specify the name of the source file, and that SCons correctly deduces the names of the object and executable files to be built from the base of the source file name.
Second, notice that the same input SConstruct file, without any changes, generates the correct output file names on both systems: hello.o and hello on POSIX systems, hello.obj and hello.exe on Windows systems. This is a simple example of how SCons makes it extremely easy to write portable software builds.
(Note that we won't provide duplicate side-by-side POSIX and Windows output for all of the examples in this guide; just keep in mind that, unless otherwise specified, any of the examples should work equally well on both types of systems.)