Hi Chris, 

> What do you perceive are the deficiencies of Makefiles?

take a look at the SConstruct makefile for the "net" project:

http://lispbuilder.svn.sourceforge.net/viewvc/*checkout*/lispbuilder/trunk/n
et/SConstruct

With Makefiles you have to specify which programs to use for the libraries,
which names the libraries have (*.dll on Windows, lib*.dylib on MacOSX and
lib*.so on Linux) and which programs needs to be called for creating the
libraries. Same for applications (but this is easier, because there is only
*.exe and *). SCons knows this already.

This is wrapped in some nice objects, so you can write this:

env = Environment()
lib = env.SharedLibrary('net', sources)
prg = env.Program('server', 'server.c')
env = Environment()
env.Depends(prg, lib)

"SharedLibrary" returns an object, which can be used to create a dependency
for an executable. With Makefiles this will be cluttered with
prefixes/suffixes for the filenames.

But as I wrote, one main deficiencies of Makefiles is that it is not
possible to include some scripting logic without calling external programs.
SCons is an integrated system, where you can use Python to write custom
build steps without the need to interface to external shell scripts.

The "net" project shows already an example with the "system" environment
variable, which is used for distinguish different set of targets, but I'm
sure this can be simplified, because I don't have much experience with
SCons. E.g. the only difference for the 3 platforms are different set of
compiler and linker switches and different set of files. The build
instructions itself are the same, so this could be refactored to some Python
arrays, but I don't know Python good enough to do it. I think the size could
be shrinked to 1/3 of the current build file. And the plaform could be
detected at runtime, which means running just "scons" on every system would
do the build.

Regards,

Frank

_______________________________________________
application-builder mailing list
[email protected]
http://www.lispniks.com/mailman/listinfo/application-builder

Reply via email to