3 Copyright (c) 2001, 2002, 2003 Steven Knight
5 Permission is hereby granted, free of charge, to any person obtaining
6 a copy of this software and associated documentation files (the
7 "Software"), to deal in the Software without restriction, including
8 without limitation the rights to use, copy, modify, merge, publish,
9 distribute, sublicense, and/or sell copies of the Software, and to
10 permit persons to whom the Software is furnished to do so, subject to
11 the following conditions:
13 The above copyright notice and this permission notice shall be included
14 in all copies or substantial portions of the Software.
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17 KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18 WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 One of the more useful ways in which you can use multiple
29 construction environments is to link programs
30 with different sets of libraries.
35 <title>Building Libraries</title>
39 You build your own libraries by specifying &Library;
46 env.Library('foo', ['f1.c', 'f2.c', 'f3.c'])
51 &SCons; uses the appropriate library prefix and suffix for your system.
52 So on POSIX or Linux systems,
53 the above example would build as follows
54 (although &ranlib may not be called on all systems):
59 % <userinput>scons</userinput>
63 ar r libfoo.a f1.o f2.o f3.o
70 a build of the above example would look like:
75 C:\><userinput>scons</userinput>
79 lib /nologo /OUT:foo.lib f1.obj f2.obj f3.obj
84 The rules for the target name of the library
85 are similar to those for programs:
86 if you don't explicitly specify a target library name,
87 &SCons; will deduce one from the
88 name of the first source file specified,
89 and &SCons; will add an appropriate
90 file prefix and suffix if you leave them off.
97 <title>Linking with Libraries</title>
101 Usually, the goal of building a library
102 is to link it with one or more programs.
103 You link libraries with a program by specifying
104 the libraries in the &LIBS; construction variable,
105 and by specifying the directory in which
106 the library will be found in the
107 &LIBPATH; construction variable:
112 env = Environment(LIBS = 'foo', LIBPATH = '.')
113 env.Library('foo', ['f1.c', 'f2.c', 'f3.c'])
114 env.Program('prog.c')
119 Notice, of course, that you don't need to specify a library
120 prefix (like <literal>lib</literal>)
121 or suffix (like <literal>.a</literal> or <literal>.lib</literal>).
122 &SCons; uses the correct prefix or suffix for the current system.
128 On a POSIX or Linux system,
129 a build of the above example would look like:
134 % <userinput>scons</userinput>
138 ar r libfoo.a f1.o f2.o f3.o
140 cc -c prog.c -o prog.o
141 cc -o prog -L. -lfoo prog.o
147 a build of the above example would look like:
152 C:\><userinput>scons</userinput>
156 lib /nologo /OUT:foo.lib f1.obj f2.obj f3.obj
157 cl /Foprog.obj prog.c
158 link /OUT:prog.exe /LIBPATH:. foo.lib prog.obj
163 As usual, notice that &SCons; has taken care
164 of constructing the correct command lines
165 to link with the specified library on each system.
172 <title>Finding Libraries: the &LIBPATH; Construction Variable</title>
176 By default, the linker will only look in
177 certain system-defined directories for libraries.
178 &SCons; knows how to look for libraries
179 in directories that you specify with the
180 &LIBPATH; construction variable.
181 &LIBPATH; consists of a list of
182 directory names, like so:
187 env = Environment(LIBS = 'm',
188 LIBPATH = ['/usr/lib', '/usr/local/lib'])
189 env.Program('prog.c')
194 Using a Python list is preferred because it's portable
195 across systems. Alternatively, you could put all of
196 the directory names in a single string, separated by the
197 system-specific path separator character:
198 a colon on POSIX systems:
203 LIBPATH = '/usr/lib:/usr/local/lib'
208 or a semi-colon on Windows systems:
213 LIBPATH = 'C:\lib;D:\lib'
218 On a POSIX or Linux system,
219 a build of the above example would look like:
224 % <userinput>scons</userinput>
225 cc -c prog.c -o prog.o
226 cc -o prog -L/usr/lib -L/usr/local/lib -lm prog.o
232 a build of the above example would look like:
237 C:\><userinput>scons</userinput>
238 cl /Foprog.obj prog.c
239 link /nologo /OUT:program.exe /LIBPATH:\usr\lib;\usr\local\lib m.lib prog.obj
244 Note again that &SCons; has taken care of
245 the system-specific details of creating
246 the right command-line options.