SconstructShortMsvcWin32DebugRelease - ajf58/scons GitHub Wiki


This lets you choose debug or release from the command line:

#!python 
import glob

#get the mode flag from the command line
#default to 'release' if the user didn't specify
mymode = ARGUMENTS.get('mode', 'release')   #holds current mode

#check if the user has been naughty: only 'debug' or 'release' allowed
if not (mymode in ['debug', 'release']):
    print "Error: expected 'debug' or 'release', found: " + mymode
    Exit(1)

#tell the user what we're doing
print '**** Compiling in ' + mymode + ' mode...'

project = 'myprogram'        #holds the project name
buildroot = '../' + mymode   #holds the root of the build directory tree
debugcflags = ['-W1', '-GX', '-EHsc', '-D_DEBUG', '/MDd']   #extra compile flags for debug
releasecflags = ['-O2', '-EHsc', '-DNDEBUG', '/MD']         #extra compile flags for release

#-------
#From here on will be common to all projects

builddir = buildroot + '/' + project   #holds the build directory for this project
targetpath = builddir + '/' + project  #holds the path to the executable in the build directory

env = Environment()

#append the user's additional compile flags
#assume debugcflags and releasecflags are defined
if mymode == 'debug':
    env.Append(CCFLAGS=debugcflags)
else:
    env.Append(CCFLAGS=releasecflags)

#specify the build directory
BuildDir('#' + builddir, "#.", duplicate=0)

env.Program(targetpath, source=map(lambda x: '#' + builddir + '/' + x, glob.glob('*.cpp')))