SCONS(1) SCons 4.11.1 SCONS(1) (NAME) scons - (SYNOPSIS) scons [...] [name=val...] [...] (DESCRIPTION) SCons ( ) . SCons . scons Python 3.7 Ninja ( ninja ). 4.3.0: Python 3.5 . CPython 3.5 : https://peps.python.org/pep-0478. 4.9.0: Python 3.6 . CPython 3.6 : https://peps.python.org/pep-0494. 4.11.0: Python 3.7 SCons . CPython 3.7 : https://peps.python.org/pep-0537. 4.11.0: Python 3.8 SCons . CPython 3.8 : https://peps.python.org/pep-0569. SCons ( targets) ( actions) . SCons (Builder) (object files) ( sources) . SCons . "foo" SCons ( libfoo.so GNU/Linux foo.dll Windows) . SCons (header) ( #include C C++) (implicit dependencies) . SCons . (cryptographic hash) . ( content signature) Decider . (out-of-date) . . ( build signature) ( ) ( ) . SCons ( " " out-of-tree builds ) (variant directories) . ("" variants) ( SCons "clean" ). VariantDir . scons . SConstruct ( " SConscript" ). . SConstruct ( -C -D -u -U ) . -f . : SConstruct SConscript . SConscript . " SConscript" ( SConstruct) . - SConscript () scons . SConscript (context) . SConscript scons site directory ( ) - site_scons --site-dir . Python (sys.path) Python SConscript (import) . () site_init.py () site_tools toolpath . --site-dir --no-site-dir . SConscript Python . SCons Python . SConscript ( import ). Python Python . Python SCons (import) ( ). SCons SConscript . ( - scons: - -Q ): $ scons foo.out scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... cp foo.in foo.out scons: done building targets. $ SCons scons . ( CI) . os.environ Python ( ). $ENV . scons ( " (ENVIRONMENT)" ). scons PATH . Windows PATH SCons . PATH : import os env = Environment(ENV={'PATH': os.environ['PATH']}) scons : import os env = Environment( ENV={ 'PATH': os.environ['PATH'], 'MODULEPATH': os.environ['MODULEPATH'], 'PKG_CONFIG_PATH': os.environ['PKG_CONFIG_PATH'], } ) : import os env = Environment(ENV=os.environ.copy()) . scons ( CI) . . (env["ENV"]) . scons SConstruct ( ) . scons ( SCONSFLAGS ) . ( " (OPTIONS)" ) . . SConscript : scons debug=1 ARGUMENTS SConscript : if ARGUMENTS.get("debug", ""): env = Environment(CCFLAGS="-g") else: env = Environment() ARGLIST . . ARGLIST . "Command-Line Construction Variables" . scons (cache) () . SConscript scons . . --cache-force --cache-disable --cache-readonly --cache-show . --random . scons . Windows win32 scons Microsoft Visual C++ MinGW Intel GCC LLVM/clang PharLap ETS . Windows cygwin ( scons cygwin ) GCC MSVC . OS/2 scons OS/2 GCC Microsoft Visual C++ . SGI IRIX IBM AIX Hewlett Packard HP-UX Oracle Solaris scons ( MIPSpro Visual Age aCC Forte) GCC . FreeBSD OpenBSD scons LLVM/clang GCC Intel . POSIX (Linux UNIX) macOS scons GCC LLVM/clang Intel . tools construction environment Tool construction variables . (Target Selection) SCons (build) (no-exec) (clean) . : 1. . (phony) Alias . scons . COMMAND_LINE_TARGETS . 2. scons SConscript Default . DEFAULT_TARGETS . 3. scons (-C -D -u -U). --debug=explain . 4. scons . dll C scons (object files) . Default (.) : scons . (root) ( POSIX): scons / () ( Windows): scons C:\ D:\ : scons src/subdir scons -u SConstruct ( -D -U ): cd src/subdir scons -u . scons . <<>> SConscript . -c : scons -c . : scons -c build export build export. Clean SConscript . -c NoClean . scons -j : scons -j 4 . (OPTIONS) scons Make cons . -b Make . -c, --clean, --remove (clean) . Clean . NoClean . Python SConscript . . SConscript GetOption if GetOption("clean"): . --cache-debug=file (derived-file) file . file (-) . (build signature) CacheDir . --cache-disable, --no-cache . scons . . --cache-force, --cache-populate CacheDir . ( --cache-disable) . --cache-readonly . --cache-show ( *COMSTR) . scons . . --config=mode Configure . mode : auto SCons . scons ( ) . . force . . cache . --config=cache scons . -C directory, --directory=directory scons directory . SConstruct Sconstruct sconstruct SConstruct.py Sconstruct.py sconstruct.py . -C -C directory . -u -U -D SConstruct . -D -u . . --debug=type[,type...] . type . . : action-timestamps (time profiling) . . . --debug=time . 3.1. count SCons SConscript . SCons -O () Python SCons ( *.pyo) . duplicate / ( ) (variant directory) . . explain scons ( ) . findlibs . includes include . (include ) : $ scons --debug=includes foo.o json JSON : memory count time action-timestamps scons_stats.json DebugOptions : DebugOptions(json='path/to/file.json') $ scons --debug=memory,json foo.o memoizer (hits) (misses) Memoizer SCons () . memory SCons SConscript . objects SCons . pdb scons pdb Python. $ scons --debug=pdb > /usr/lib/python3.11/site-packages/SCons/Script/Main.py(869)_main() -> options = parser.values (Pdb) pdb (main routine) scons . (sys.path) scons . (breakpoints) . .pdbrc : sys.path.append('.') pdb break tbreak clear .py ( ) . SConstruct SConscript .py . 4.6.0: SConstruct SConscript .py . 4.8.0: SCsub .py . prepare ( ) . scons ( --debug=explain). scons . presub . . : $ scons --debug=presub Building myprog.o with action(s): $SHCC $SHCFLAGS $SHCCFLAGS $CPPFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES ... stacktrace (stack trace) Python . time (time profiling) : o o ( SCons ) o SConscript o SCons ( SConscript) o o (wall-clock time) o SConscript ( scons -j SCons . scons -j SCons .) sconscript SConscript . --diskcheck=type include SCons ( ) . type diskcheck all none . . all . : match SCons . / . --duplicate=ORDER : (hard links) (soft/symbolic links) . . . ORDER hard-soft-copy () soft-hard-copy hard-copy soft-copy copy . SCons . --enable-virtualenv virtualenv SCons. --experimental=feature / . feature all none . . none . ninja ( 4.2) legacy_sched_deprecated ( 4.11.0). (legacy scheduler) . 4.7 SCons . legacy_sched 4.7 . . 4.11.0 legacy_sched_deprecated - SCons . - . 4.2 . -f file, --file=file, --makefile=file, --sconstruct=file file SConscript . -f scons . -h, --help SConscript ( Help ) SCons . SCons ( -H) AddOption . . SCons SConscript . --hash-chunksize=KILOBYTES content signatures KILOBYTES. . . . . 4.1. --hash-format=ALGORITHM SCons ALGORITHM. content signatures build signatures CacheDir . : md5 sha1 sha256. Python scons hashlib . . MD5 FIPS Python 3.9 SHA1 SHA256 . Python 3.9 MD5 FIPS. SConsign . .sconsign.dblite . ALGORITHM md5 . --hash-format=sha256 SConsign .sconsign_sha256.dblite . 4.1. -H, --help-options SCons . -i, --ignore-errors . -I directory, --include-dir=directory directory Python . -I . --ignore-virtualenv virtualenv SCons . --implicit-cache . scons () . SCons : scons ( $CPPPATH $LIBPATH) . scons ( $CPPPATH $LIBPATH) . --implicit-deps-changed SCons . . --implicit-cache . --implicit-deps-unchanged SCons . . --implicit-cache . --install-sandbox=sandbox_path Install sandbox_path . Install InstallAs InstallVersionedLib SConscript . --interactive SCons . SConscript scons>>> . SConscript . SCons : build [OPTIONS] [TARGETS] ... (TARGETS) ( ) (OPTIONS) SCons . b scons build . SCons build : --cache-debug=FILE --cache-disable, --no-cache --cache-force, --cache-populate --cache-readonly --cache-show --debug=TYPE -i, --ignore-errors -j N, --jobs=N -k, --keep-going -n, --no-exec, --just-print, --dry-run, --recon -Q -s, --silent, --quiet --taskmastertrace=FILE --tree=OPTIONS SCons build ( SConscript ). clean [OPTIONS] [TARGETS] ... (TARGETS) ( ) (OPTIONS) . c . build --clean . exit SCons . (Ctrl+D UNIX Linux Ctrl+Z Windows) . help [COMMAND] SCons . COMMAND h ? . shell [COMMANDLINE] COMMANDLINE . COMMANDLINE SHELL ( UNIX Linux) COMSPEC ( Windows) . sh ! . version SCons . . readline . $ scons --interactive scons: Reading SConscript files ... scons: done reading SConscript files. scons>>> build -n prog scons>>> exit -j N, --jobs=N () . -j . -k, --keep-going . . -m GNU Make . --max-drift=SECONDS SECONDS . (content signature) () . . . . --md5-chunksize=KILOBYTES --hash-chunksize. 4.2: . -n, --no-exec, --just-print, --dry-run, --recon no-exec . . - ( Python) . no-exec GetOption : if not GetOption("no_exec"): # run regular instructions SCons . (builder action) . SCons Configure no-exec ( $CONFIGUREDIR $CONFIGURELOG ). <<>> (priming) no-exec . --no-site-dir site . site ( site_scons) --site-dir sys.path site_init.py site_tools . --site-dir . --package-type=type Package . SCons . packaging . --profile=file SCons (profiler) Python file . pstats Python . -q, --question . . -Q SConscript . . --random . (caching) . -s, --silent, --quiet . . SCons . -S, --no-keep-going, --stop GNU Make . --site-dir=path path . sys.path path/site_init.py path/site_tools . - path . --site-dir . SCons . ( <<>>) ( ) site_init.py . Windows: %ALLUSERSPROFILE%/scons/site_scons %LOCALAPPDATA%/scons/site_scons %APPDATA%/scons/site_scons %USERPROFILE%/.scons/site_scons ./site_scons <<>> : %ALLUSERSPROFILE%/Application Data/scons/site_scons Mac OS X: /Library/Application Support/SCons/site_scons /opt/local/share/scons/site_scons (for MacPorts) /sw/share/scons/site_scons (for Fink) $HOME/Library/Application Support/SCons/site_scons $HOME/.scons/site_scons ./site_scons Solaris: /opt/sfw/scons/site_scons /usr/share/scons/site_scons $HOME/.scons/site_scons ./site_scons Linux HPUX -Posix: /usr/share/scons/site_scons $HOME/.scons/site_scons ./site_scons --stack-size=KILOBYTES KILOBYTES . . (builders) (out-of-date) . ( -j N --jobs=N SetOption ). (stack overflow) . (segmentation fault) scons . scons . . . -t, --touch GNU Make . ( [touching] scons .) --taskmastertrace=file (trace) (Node) Taskmaster file . - . --tree=type[,type...] (top-level target) . type : all . (implicit) . derived () . linedraw (Unicode line-drawing) ASCII. type() . type all . 4.0. status . prune . [] . type : # : scons --tree=derived,status # # : scons --tree=all,prune,status target -u, --up, --search-up SConstruct Sconstruct sconstruct SConstruct.py Sconstruct.py sconstruct.py . . -U -u . () SConscript . -v, --version scons . -w, --print-directory . --no-print-directory -w . --warn=type, --warn=no-type ( "no-") (--warning ). type : all . cache-version (cache) CacheDir . . cache-write-error CacheDir. . cache-cleanup-error . corrupt-sconsign .sconsign. . dependency . . deprecated . . --warn=no-deprecated . . duplicate-environment . . fortran-cxx-mix Fortran C++ . future-reserved-variable . future-deprecated . . SCons . link (link). misleading-keywords targets sources Builder. target source . no-object-count --debug=object scons -O Python Python (.pyo) . "no-" . "-no" . no-parallel-support Python -j. . "no-" . "-no" . python-version SCons Python . . reserved-variable $CHANGED_SOURCES $CHANGED_TARGETS $TARGET $TARGETS $SOURCE $SOURCES $UNCHANGED_SOURCES $UNCHANGED_TARGETS. . stack-size . . target-not-built . . -Y repository --repository=repository --srcdir=repository repository . -Y . Repository . SCONSCRIPT (SCONSCRIPT FILE REFERENCE) SConscript (SConscript Files) SConscript . (scons ). scons SConstruct scons Sconstruct sconstruct SConstruct.py Sconstruct.py sconstruct.py . ( ) -f . SConstruct SConscript . scons . SConscript (context) . . Export exports SConscript Return SConscript Import . SCons SConscript . : (Construction Environments) (Tools) (Builder Methods) (Functions and Environment Methods) SConscript (SConscript Variables) (Construction Variables) (Configure Contexts) (Command-Line Construction Variables) (Node Objects) (Construction Environments) (Construction Environment) SCons . Environment : env = Environment() (Construction Variables) . : env = Environment(FOO='foo') env['FOO'] = 'foo' Environment . Microsoft Visual C++ : # initializes msvc to v14.1 env = Environment(MSVC_VERSION="14.1") env = Environment() # msvc tool was initialized to default, does not reinitialize env['MSVC_VERSION'] = "14.1" env = Environment(tools=[]) env['MSVC_VERSION'] = "14.1" # msvc tool initialization was deferred, so will pick up new value env.Tool('default') parse_flags env.MergeFlags . ( ) . env.ParseFlags . env = Environment(parse_flags='-Iinclude -DEBUG -lm') 'include' $CPPPATH 'EBUG' $CPPDEFINES 'm' $LIBS . env.Clone . . env.Clone Environment . SCons (Default Environment) . . DefaultEnvironment . (builder methods) (platform) . platform : env = Environment(platform='cygwin') (platform) . win32 SystemDrive SystemRoot ENV . . platform (aix cygwin darwin hpux irix os2 posix sunos win32) (callable) Platform Environment : def my_platform(env): env['VAR'] = 'xyzzy' env = Environment(platform=my_platform) platform . platform platform="cygwin" win32 . tools toolpath . "Tools" . variables Variables . "Command-Line Construction Variables" . (Tools) SCons ( ) ( ). Extending SCons Tool Modules . SCons . SConscript (builder) Object (object file) C C builder . . - platform platform . tools . tools (list) ( ) . : env = Environment(tools=['msvc', 'lex']) tools . C/C++ (linker) : tools=['clang', 'link']. tools tools 'default' SCons ( env['ENV']['PATH']) . PATH os.environ . PATH . Tool ( ). SCons : 386asm 386ASM Phar Lap ETS . : $AS, $ASCOM, $ASFLAGS, $ASPPCOM, $ASPPFLAGS. : $CC, $CPPFLAGS, $_CPPDEFFLAGS, $_CPPINCFLAGS. aixc++ IMB xlc / Visual Age C++ . : $CXX, $CXXVERSION, $SHCXX, $SHOBJSUFFIX. aixcc IBM xlc / Visual Age C . : $CC, $CCVERSION, $SHCC. aixf77 IBM Visual Age f77 Fortran . : $F77, $SHF77. aixlink IBM Visual Age . : $LINKFLAGS, $SHLIBSUFFIX, $SHLINKFLAGS. applelink Apple ( GNU) . : $APPLELINK_COMPATIBILITY_VERSION, $APPLELINK_CURRENT_VERSION, $APPLELINK_NO_COMPATIBILITY_VERSION, $APPLELINK_NO_CURRENT_VERSION, $FRAMEWORKPATHPREFIX, $LDMODULECOM, $LDMODULEFLAGS, $LDMODULEPREFIX, $LDMODULESUFFIX, $LINKCOM, $SHLINKCOM, $SHLINKFLAGS, $_APPLELINK_COMPATIBILITY_VERSION, $_APPLELINK_CURRENT_VERSION, $_FRAMEWORKPATH, $_FRAMEWORKS. : $FRAMEWORKSFLAGS. ar ar . : $AR, $ARCOM, $ARFLAGS, $LIBPREFIX, $LIBSUFFIX, $RANLIB, $RANLIBCOM, $RANLIBFLAGS. as as . : $AS, $ASCOM, $ASFLAGS, $ASPPCOM, $ASPPFLAGS. : $CC, $CPPFLAGS, $_CPPDEFFLAGS, $_CPPINCFLAGS. bcc32 bcc32 . : $CC, $CCCOM, $CCFLAGS, $CFILESUFFIX, $CFLAGS, $CPPDEFPREFIX, $CPPDEFSUFFIX, $INCPREFIX, $INCSUFFIX, $SHCC, $SHCCCOM, $SHCCFLAGS, $SHCFLAGS, $SHOBJSUFFIX. : $_CPPDEFFLAGS, $_CPPINCFLAGS. cc C POSIX . : $CC, $CCCOM, $CCDEPFLAGS, $CCFLAGS, $CFILESUFFIX, $CFLAGS, $CPPDEFPREFIX, $CPPDEFSUFFIX, $FRAMEWORKPATH, $FRAMEWORKS, $INCPREFIX, $INCSUFFIX, $SHCC, $SHCCCOM, $SHCCFLAGS, $SHCFLAGS, $SHOBJSUFFIX. : $CCCOMSTR, $PLATFORM, $SHCCCOMSTR. clang Clang C . : $CC, $CCDEPFLAGS, $CCVERSION, $SHCCFLAGS. clangxx Clang C++ . : $CXX, $CXXVERSION, $SHCXXFLAGS, $SHOBJSUFFIX, $STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME. compilation_db CompilationDatabase clang . : $COMPILATIONDB_COMSTR, $COMPILATIONDB_PATH_FILTER, $COMPILATIONDB_USE_ABSPATH. cvf Compaq Visual Fortran . : $FORTRAN, $FORTRANCOM, $FORTRANMODDIR, $FORTRANMODDIRPREFIX, $FORTRANMODDIRSUFFIX, $FORTRANPPCOM, $OBJSUFFIX, $SHFORTRANCOM, $SHFORTRANPPCOM. : $CPPFLAGS, $FORTRANFLAGS, $SHFORTRANFLAGS, $_CPPDEFFLAGS, $_FORTRANINCFLAGS, $_FORTRANMODFLAG. cXX C++ POSIX . : $CPPDEFPREFIX, $CPPDEFSUFFIX, $CXX, $CXXCOM, $CXXFILESUFFIX, $CXXFLAGS, $INCPREFIX, $INCSUFFIX, $OBJSUFFIX, $SHCXX, $SHCXXCOM, $SHCXXFLAGS, $SHOBJSUFFIX. : $CXXCOMSTR, $SHCXXCOMSTR. cyglink / cygwin . : $IMPLIBPREFIX, $IMPLIBSUFFIX, $LDMODULEVERSIONFLAGS, $LINKFLAGS, $RPATHPREFIX, $RPATHSUFFIX, $SHLIBPREFIX, $SHLIBSUFFIX, $SHLIBVERSIONFLAGS, $SHLINKCOM, $SHLINKFLAGS, $_LDMODULEVERSIONFLAGS, $_SHLIBVERSIONFLAGS. default Tool . default tools . . << >> . $TOOLS . : filesystem;, wix, lex, yacc, rpcgen, swig, jar, javac, javah, rmic, dvipdf, dvips, gs, tex, latex, pdflatex, pdftex, tar, zip, textfile. ( ) : C gcc, intelc, icc, cc; C++ g++, intelc, icc, cXX; gas, nasm, masm; gnulink, ilink; Fortran gfortran, g77, ifort, ifl, f95, f90, f77; ar. : m4 rpm. ( ) : C msvc, mingw, gcc, intelc, icl, icc, cc, bcc32; C++ msvc, intelc, icc, g++, cXX, bcc32; masm, nasm, gas, 386asm; mslink, gnulink, ilink, linkloc, ilink32; Fortran gfortran, g77, ifl, cvf, f95, f90, fortran; mslib, ar, tlib; : msvs, midl. (MacOS) ( ) : C gcc, cc; C++ g++, cXX; as; applelink, gnulink; Fortran gfortran, f95, f90, g77; ar. : m4, rpm. BSD LLVM/clang (FreeBSD OpenBSD) C ( ) clang, gcc, intelc, icc, cc C++ clangxx, g++, intelc, icc, cXX . scons (: SCons/Tool/__init__.py). dmd D DMD . : $DC, $DCOM, $DDEBUG, $DDEBUGPREFIX, $DDEBUGSUFFIX, $DFILESUFFIX, $DFLAGPREFIX, $DFLAGS, $DFLAGSUFFIX, $DINCPREFIX, $DINCSUFFIX, $DLIB, $DLIBCOM, $DLIBDIRPREFIX, $DLIBDIRSUFFIX, $DLIBFLAGPREFIX, $DLIBFLAGSUFFIX, $DLIBLINKPREFIX, $DLIBLINKSUFFIX, $DLINK, $DLINKCOM, $DLINKFLAGPREFIX, $DLINKFLAGS, $DLINKFLAGSUFFIX, $DPATH, $DRPATHPREFIX, $DRPATHSUFFIX, $DVERPREFIX, $DVERSIONS, $DVERSUFFIX, $SHDC, $SHDCOM, $SHDLIBVERSIONFLAGS, $SHDLINK, $SHDLINKCOM, $SHDLINKFLAGS. docbook Docbook SCons . (toolchain) HTML PDF . Docbook XSL 1.76.1 . ... . XInclude HTML . utils/xmldepend.xsl Paul DuBois . XML ! XSLT PDF . . "docbook" Environment : env = Environment(tools=['docbook']) docbook xsltproc PDF fop . PATH . Docbook HTML : o lxml libxml2 o XSLT xsltproc saxon saxon-xslt xalan . PDF fop xep . HTML PDF . : env = Environment(tools=['docbook']) env.DocbookHtml('manual.html', 'manual.xml') env.DocbookPdf('manual.pdf', 'manual.xml') XML manual.xml . : env = Environment(tools=['docbook']) env.DocbookHtml('manual') env.DocbookPdf('manual') . : env = Environment(tools=['docbook']) env.DocbookHtml(['manual.html','reference.html'], ['manual.xml','reference.xml']) : env = Environment(tools=['docbook']) env.DocbookHtml(['manual','reference']) ! . DocbookHtml DocbookPdf DocbookEpub DocbookSlidesPdf DocbookXInclude . DocbookMan refname XML . DocbookHtmlChunked DocbookHtmlhelp DocbookSlidesHtml : 1. 2. index.html XSL . HTML . : env = Environment(tools=['docbook']) env.DocbookHtmlhelp('manual') XSL xsl : env.DocbookHtml('other.html', 'manual.xml', xsl='html.xsl') XSL html.xsl HTML pdf.xsl PDF XSL . : DOCBOOK_DEFAULT_XSL_HTML DOCBOOK_DEFAULT_XSL_HTMLCHUNKED DOCBOOK_DEFAULT_XSL_HTMLHELP DOCBOOK_DEFAULT_XSL_PDF DOCBOOK_DEFAULT_XSL_EPUB DOCBOOK_DEFAULT_XSL_MAN DOCBOOK_DEFAULT_XSL_SLIDESPDF DOCBOOK_DEFAULT_XSL_SLIDESHTML : env = Environment( tools=['docbook'], DOCBOOK_DEFAULT_XSL_HTML='html.xsl', DOCBOOK_DEFAULT_XSL_PDF='pdf.xsl', ) env.DocbookHtml('manual') # now uses html.xsl : $DOCBOOK_DEFAULT_XSL_EPUB $DOCBOOK_DEFAULT_XSL_HTML $DOCBOOK_DEFAULT_XSL_HTMLCHUNKED $DOCBOOK_DEFAULT_XSL_HTMLHELP $DOCBOOK_DEFAULT_XSL_MAN $DOCBOOK_DEFAULT_XSL_PDF $DOCBOOK_DEFAULT_XSL_SLIDESHTML $DOCBOOK_DEFAULT_XSL_SLIDESPDF $DOCBOOK_FOP $DOCBOOK_FOPCOM $DOCBOOK_FOPFLAGS $DOCBOOK_XMLLINT $DOCBOOK_XMLLINTCOM $DOCBOOK_XMLLINTFLAGS $DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCCOM $DOCBOOK_XSLTPROCFLAGS $DOCBOOK_XSLTPROCPARAMS. : $DOCBOOK_FOPCOMSTR $DOCBOOK_XMLLINTCOMSTR $DOCBOOK_XSLTPROCCOMSTR. dvi DVI . dvipdf dvipdf . : $DVIPDF $DVIPDFCOM $DVIPDFFLAGS. : $DVIPDFCOMSTR. dvips dvips . : $DVIPS $DVIPSFLAGS $PSCOM $PSPREFIX $PSSUFFIX. : $PSCOMSTR. f03 POSIX Fortran 03 . : $F03 $F03COM $F03FLAGS $F03PPCOM $SHF03 $SHF03COM $SHF03FLAGS $SHF03PPCOM $_F03INCFLAGS. : $F03COMSTR $F03PPCOMSTR $FORTRANCOMMONFLAGS $SHF03COMSTR $SHF03PPCOMSTR. f08 POSIX Fortran 08. : $F08, $F08COM, $F08FLAGS, $F08PPCOM, $SHF08, $SHF08COM, $SHF08FLAGS, $SHF08PPCOM, $_F08INCFLAGS. : $F08COMSTR, $F08PPCOMSTR, $FORTRANCOMMONFLAGS, $SHF08COMSTR, $SHF08PPCOMSTR. f77 POSIX Fortran 77. : $F77, $F77COM, $F77FILESUFFIXES, $F77FLAGS, $F77PPCOM, $F77PPFILESUFFIXES, $FORTRAN, $FORTRANCOM, $FORTRANFLAGS, $SHF77, $SHF77COM, $SHF77FLAGS, $SHF77PPCOM, $SHFORTRAN, $SHFORTRANCOM, $SHFORTRANFLAGS, $SHFORTRANPPCOM, $_F77INCFLAGS. : $F77COMSTR, $F77PPCOMSTR, $FORTRANCOMMONFLAGS, $FORTRANCOMSTR, $FORTRANFLAGS, $FORTRANPPCOMSTR, $SHF77COMSTR, $SHF77PPCOMSTR, $SHFORTRANCOMSTR, $SHFORTRANFLAGS, $SHFORTRANPPCOMSTR. f90 POSIX Fortran 90. : $F90, $F90COM, $F90FLAGS, $F90PPCOM, $SHF90, $SHF90COM, $SHF90FLAGS, $SHF90PPCOM, $_F90INCFLAGS. : $F90COMSTR, $F90PPCOMSTR, $FORTRANCOMMONFLAGS, $SHF90COMSTR, $SHF90PPCOMSTR. f95 POSIX Fortran 95. : $F95, $F95COM, $F95FLAGS, $F95PPCOM, $SHF95, $SHF95COM, $SHF95FLAGS, $SHF95PPCOM, $_F95INCFLAGS. : $F95COMSTR, $F95PPCOMSTR, $FORTRANCOMMONFLAGS, $SHF95COMSTR, $SHF95PPCOMSTR. fortran POSIX Fortran. : $FORTRAN, $FORTRANCOM, $FORTRANFLAGS, $SHFORTRAN, $SHFORTRANCOM, $SHFORTRANFLAGS, $SHFORTRANPPCOM. : $CPPFLAGS, $FORTRANCOMSTR, $FORTRANPPCOMSTR, $SHFORTRANCOMSTR, $SHFORTRANPPCOMSTR, $_CPPDEFFLAGS. g++ C++ g++. : $CXX, $CXXVERSION, $SHCXXFLAGS, $SHOBJSUFFIX. g77 Fortran g77. : $F77, $F77COM, $F77FILESUFFIXES, $F77PPCOM, $F77PPFILESUFFIXES, $FORTRAN, $FORTRANCOM, $FORTRANPPCOM, $SHF77, $SHF77COM, $SHF77FLAGS, $SHF77PPCOM, $SHFORTRAN, $SHFORTRANCOM, $SHFORTRANFLAGS, $SHFORTRANPPCOM. : $F77FLAGS, $FORTRANCOMMONFLAGS, $FORTRANFLAGS. gas gas . as . : $AS. gcc C gcc . : $CC, $CCDEPFLAGS, $CCVERSION, $SHCCFLAGS. gdc D GDC . : $DC, $DCOM, $DDEBUG, $DDEBUGPREFIX, $DDEBUGSUFFIX, $DFILESUFFIX, $DFLAGPREFIX, $DFLAGS, $DFLAGSUFFIX, $DINCPREFIX, $DINCSUFFIX, $DLIB, $DLIBCOM, $DLIBDIRPREFIX, $DLIBDIRSUFFIX, $DLIBFLAGPREFIX, $DLIBFLAGSUFFIX, $DLIBLINKPREFIX, $DLIBLINKSUFFIX, $DLINK, $DLINKCOM, $DLINKFLAGPREFIX, $DLINKFLAGS, $DLINKFLAGSUFFIX, $DPATH, $DRPATHPREFIX, $DRPATHSUFFIX, $DVERPREFIX, $DVERSIONS, $DVERSUFFIX, $SHDC, $SHDCOM, $SHDLIBVERSIONFLAGS, $SHDLINK, $SHDLINKCOM, $SHDLINKFLAGS. gettext SCons . : o xgettext - () POT. o msginit - PO . o msgmerge - PO o msgfmt - PO MO. gettext . () . Translate . gettext 'gettext' : env = Environment(tools=['default', 'gettext']) gfortran GNU Fortran . fortran . : $F77, $F90, $F95, $FORTRAN, $SHF77, $SHF77FLAGS, $SHF90, $SHF90FLAGS, $SHF95, $SHF95FLAGS, $SHFORTRAN, $SHFORTRANFLAGS. gnulink / GNU . : $LDMODULEVERSIONFLAGS, $RPATHPREFIX, $RPATHSUFFIX, $SHLIBVERSIONFLAGS, $SHLINKFLAGS, $_LDMODULESONAME, $_SHLIBSONAME. gs Tool Ghostscript . Action PDF PS/EPS PDF TeX/LaTeX . Gs Ghostscript . : $GS, $GSCOM, $GSFLAGS. : $GSCOMSTR. hpc++ aCC HP/UX . hpcc aCC HP/UX . cXX . : $CXX, $CXXVERSION, $SHCXXFLAGS. hplink HP/UX . : $LINKFLAGS, $SHLIBSUFFIX, $SHLINKFLAGS. icc icc OS/2 . : $CC, $CCCOM, $CFILESUFFIX, $CPPDEFPREFIX, $CPPDEFSUFFIX, $CXXCOM, $CXXFILESUFFIX, $INCPREFIX, $INCSUFFIX. : $CCFLAGS, $CFLAGS, $CPPFLAGS, $_CPPDEFFLAGS, $_CPPINCFLAGS. icl Intel C/C++ . intelc . ifl Intel Fortran . : $FORTRAN, $FORTRANCOM, $FORTRANPPCOM, $SHFORTRANCOM, $SHFORTRANPPCOM. : $CPPFLAGS, $FORTRANFLAGS, $_CPPDEFFLAGS, $_FORTRANINCFLAGS. ifort Intel Fortran Linux . : $F77, $F90, $F95, $FORTRAN, $SHF77, $SHF77FLAGS, $SHF90, $SHF90FLAGS, $SHF95, $SHF95FLAGS, $SHFORTRAN, $SHFORTRANFLAGS. ilink ilink OS/2 . : $LIBDIRPREFIX, $LIBDIRSUFFIX, $LIBLINKPREFIX, $LIBLINKSUFFIX, $LINK, $LINKCOM, $LINKFLAGS. ilink32 ilink32 Borland . : $LIBDIRPREFIX, $LIBDIRSUFFIX, $LIBLINKPREFIX, $LIBLINKSUFFIX, $LINK, $LINKCOM, $LINKFLAGS. install . : $INSTALL, $INSTALLSTR. intelc Intel C/C++ ( Linux Windows ) . gcc msvc ( Linux Windows) . : $AR, $CC, $CXX, $INTEL_C_COMPILER_VERSION, $LINK. jar jar . : $JAR, $JARCOM, $JARFLAGS, $JARSUFFIX. : $JARCOMSTR. javac javac . : $JAVABOOTCLASSPATH, $JAVAC, $JAVACCOM, $JAVACFLAGS, $JAVACLASSPATH, $JAVACLASSSUFFIX, $JAVAINCLUDES, $JAVASOURCEPATH, $JAVASUFFIX. : $JAVACCOMSTR. javah javah . : $JAVACLASSSUFFIX, $JAVAH, $JAVAHCOM, $JAVAHFLAGS. : $JAVACLASSPATH, $JAVAHCOMSTR. latex latex . : $LATEX, $LATEXCOM, $LATEXFLAGS. : $LATEXCOMSTR. ldc D LDC2 . : $DC, $DCOM, $DDEBUG, $DDEBUGPREFIX, $DDEBUGSUFFIX, $DFILESUFFIX, $DFLAGPREFIX, $DFLAGS, $DFLAGSUFFIX, $DINCPREFIX, $DINCSUFFIX, $DLIB, $DLIBCOM, $DLIBDIRPREFIX, $DLIBDIRSUFFIX, $DLIBFLAGPREFIX, $DLIBFLAGSUFFIX, $DLIBLINKPREFIX, $DLIBLINKSUFFIX, $DLINK, $DLINKCOM, $DLINKFLAGPREFIX, $DLINKFLAGS, $DLINKFLAGSUFFIX, $DPATH, $DRPATHPREFIX, $DRPATHSUFFIX, $DVERPREFIX, $DVERSIONS, $DVERSUFFIX, $SHDC, $SHDCOM, $SHDLIBVERSIONFLAGS, $SHDLINK, $SHDLINKCOM, $SHDLINKFLAGS. lex lex . : $LEX, $LEXCOM, $LEXFLAGS, $LEXUNISTD. : $LEXCOMSTR, $LEXFLAGS, $LEX_HEADER_FILE, $LEX_TABLES_FILE. link POSIX . <<>> . : $LDMODULE, $LDMODULECOM, $LDMODULEFLAGS, $LDMODULENOVERSIONSYMLINKS, $LDMODULEPREFIX, $LDMODULESUFFIX, $LDMODULEVERSION, $LDMODULEVERSIONFLAGS, $LIBDIRPREFIX, $LIBDIRSUFFIX, $LIBLINKPREFIX, $LIBLINKSUFFIX, $LINK, $LINKCOM, $LINKFLAGS, $SHLIBSUFFIX, $SHLINK, $SHLINKCOM, $SHLINKFLAGS, $__LDMODULEVERSIONFLAGS, $__SHLIBVERSIONFLAGS. : $LDMODULECOMSTR, $LINKCOMSTR, $SHLINKCOMSTR. linkloc LinkLoc Phar Lap ETS . : $LIBDIRPREFIX, $LIBDIRSUFFIX, $LIBLINKPREFIX, $LIBLINKSUFFIX, $LINK, $LINKCOM, $LINKFLAGS, $SHLINK, $SHLINKCOM, $SHLINKFLAGS. : $LINKCOMSTR, $SHLINKCOMSTR. m4 m4 . : $M4, $M4COM, $M4FLAGS. : $M4COMSTR. masm Microsoft . : $AS, $ASCOM, $ASFLAGS, $ASPPCOM, $ASPPFLAGS. : $ASCOMSTR, $ASPPCOMSTR, $CPPFLAGS, $_CPPDEFFLAGS, $_CPPINCFLAGS. midl Microsoft IDL . : $MIDL, $MIDLCOM, $MIDLFLAGS. : $MIDLCOMSTR. mingw MinGW (Minimal Gnu on Windows) . : $AS, $CC, $CXX, $LDMODULECOM, $LIBPREFIX, $LIBSUFFIX, $OBJSUFFIX, $RC, $RCCOM, $RCFLAGS, $RCINCFLAGS, $RCINCPREFIX, $RCINCSUFFIX, $SHCCFLAGS, $SHCXXFLAGS, $SHLINKCOM, $SHLINKFLAGS, $SHOBJSUFFIX, $WINDOWSDEFPREFIX, $WINDOWSDEFSUFFIX. : $RCCOMSTR, $SHLINKCOMSTR. msgfmt gettext . MOFiles (MO) ( PO) msgfmt(1) SCons . : $MOSUFFIX, $MSGFMT, $MSGFMTCOM, $MSGFMTCOMSTR, $MSGFMTFLAGS, $POSUFFIX. : $LINGUAS_FILE. msginit gettext scons . POInit PO ( ) msginit(1) SCons . : $MSGINIT, $MSGINITCOM, $MSGINITCOMSTR, $MSGINITFLAGS, $POAUTOINIT, $POCREATE_ALIAS, $POSUFFIX, $POTSUFFIX, $_MSGINITLOCALE. : $LINGUAS_FILE, $POAUTOINIT, $POTDOMAIN. msgmerge gettext scons . POUpdate .po (Uniform) msgmerge(1) SCons . : $MSGMERGE, $MSGMERGECOM, $MSGMERGECOMSTR, $MSGMERGEFLAGS, $POSUFFIX, $POTSUFFIX, $POUPDATE_ALIAS. : $LINGUAS_FILE, $POAUTOINIT, $POTDOMAIN. mslib Microsoft mslib . : $AR, $ARCOM, $ARFLAGS, $LIBPREFIX, $LIBSUFFIX. : $ARCOMSTR. mslink Microsoft . : $LDMODULE, $LDMODULECOM, $LDMODULEFLAGS, $LDMODULEPREFIX, $LDMODULESUFFIX, $LIBDIRPREFIX, $LIBDIRSUFFIX, $LIBLINKPREFIX, $LIBLINKSUFFIX, $LINK, $LINKCOM, $LINKFLAGS, $REGSVR, $REGSVRCOM, $REGSVRFLAGS, $SHLINK, $SHLINKCOM, $SHLINKFLAGS, $WINDOWSDEFPREFIX, $WINDOWSDEFSUFFIX, $WINDOWSEXPPREFIX, $WINDOWSEXPSUFFIX, $WINDOWSPROGMANIFESTPREFIX, $WINDOWSPROGMANIFESTSUFFIX, $WINDOWSSHLIBMANIFESTPREFIX, $WINDOWSSHLIBMANIFESTSUFFIX, $WINDOWS_INSERT_DEF. : $LDMODULECOMSTR, $LINKCOMSTR, $REGSVRCOMSTR, $SHLINKCOMSTR. mssdk Microsoft Platform SDK / Windows SDK . Tool mssdk SCons Microsoft : %INCLUDE%, %LIB%, %LIBPATH% %PATH%. : $MSSDK_DIR, $MSSDK_VERSION, $MSVS_VERSION. msvc Microsoft Visual C++ . : $BUILDERS, $CC, $CCCOM, $CCDEPFLAGS, $CCFLAGS, $CCPCHFLAGS, $CCPDBFLAGS, $CFILESUFFIX, $CFLAGS, $CPPDEFPREFIX, $CPPDEFSUFFIX, $CXX, $CXXCOM, $CXXFILESUFFIX, $CXXFLAGS, $INCPREFIX, $INCSUFFIX, $OBJPREFIX, $OBJSUFFIX, $PCHCOM, $PCHPDBFLAGS, $RC, $RCCOM, $RCFLAGS, $SHCC, $SHCCCOM, $SHCCFLAGS, $SHCFLAGS, $SHCXX, $SHCXXCOM, $SHCXXFLAGS, $SHOBJPREFIX, $SHOBJSUFFIX. : $CCCOMSTR, $CXXCOMSTR, $MSVC_NOTFOUND_POLICY, $MSVC_SCRIPTERROR_POLICY, $MSVC_SCRIPT_ARGS, $MSVC_SDK_VERSION, $MSVC_SPECTRE_LIBS, $MSVC_TOOLSET_VERSION, $MSVC_USE_SCRIPT, $MSVC_USE_SCRIPT_ARGS, $MSVC_USE_SETTINGS, $MSVC_VERSION, $PCH, $PCHSTOP, $PDB, $SHCCCOMSTR, $SHCXXCOMSTR. msvs Microsoft Visual Studio . : $MSVSBUILDCOM, $MSVSCLEANCOM, $MSVSENCODING, $MSVSPROJECTCOM, $MSVSREBUILDCOM, $MSVSSCONS, $MSVSSCONSCOM, $MSVSSCONSCRIPT, $MSVSSCONSFLAGS, $MSVSSOLUTIONCOM. mwcc Metrowerks CodeWarrior . : $CC, $CCCOM, $CFILESUFFIX, $CPPDEFPREFIX, $CPPDEFSUFFIX, $CXX, $CXXCOM, $CXXFILESUFFIX, $INCPREFIX, $INCSUFFIX, $MWCW_VERSION, $MWCW_VERSIONS, $SHCC, $SHCCCOM, $SHCCFLAGS, $SHCFLAGS, $SHCXX, $SHCXXCOM, $SHCXXFLAGS. : $CCCOMSTR, $CXXCOMSTR, $SHCCCOMSTR, $SHCXXCOMSTR. mwld Metrowerks CodeWarrior . : $AR, $ARCOM, $LIBDIRPREFIX, $LIBDIRSUFFIX, $LIBLINKPREFIX, $LIBLINKSUFFIX, $LINK, $LINKCOM, $SHLINK, $SHLINKCOM, $SHLINKFLAGS. nasm nasm Netwide Assembler . : $AS, $ASCOM, $ASFLAGS, $ASPPCOM, $ASPPFLAGS. : $ASCOMSTR, $ASPPCOMSTR. ninja Ninja ninja ninja . . / . : $IMPLICIT_COMMAND_DEPENDENCIES, $NINJA_ALIAS_NAME, $NINJA_CMD_ARGS, $NINJA_COMPDB_EXPAND, $NINJA_DEPFILE_PARSE_FORMAT, $NINJA_DIR, $NINJA_DISABLE_AUTO_RUN, $NINJA_ENV_VAR_CACHE, $NINJA_FILE_NAME, $NINJA_FORCE_SCONS_BUILD, $NINJA_GENERATED_SOURCE_ALIAS_NAME, $NINJA_GENERATED_SOURCE_SUFFIXES, $NINJA_MSVC_DEPS_PREFIX, $NINJA_POOL, $NINJA_REGENERATE_DEPS, $NINJA_SCONS_DAEMON_KEEP_ALIVE, $NINJA_SCONS_DAEMON_PORT, $NINJA_SYNTAX, $_NINJA_REGENERATE_DEPS_FUNC. : $AR, $ARCOM, $ARFLAGS, $CC, $CCCOM, $CCDEPFLAGS, $CCFLAGS, $CXX, $CXXCOM, $ESCAPE, $LINK, $LINKCOM, $PLATFORM, $PRINT_CMD_LINE_FUNC, $PROGSUFFIX, $RANLIB, $RANLIBCOM, $SHCCCOM, $SHCXXCOM, $SHLINK, $SHLINKCOM. packaging Package . --package-type . pdf Portable Document Format . : $PDFPREFIX, $PDFSUFFIX. pdflatex pdflatex . : $LATEXRETRIES, $PDFLATEX, $PDFLATEXCOM, $PDFLATEXFLAGS. : $PDFLATEXCOMSTR. pdftex pdftex . : $LATEXRETRIES, $PDFLATEX, $PDFLATEXCOM, $PDFLATEXFLAGS, $PDFTEX, $PDFTEXCOM, $PDFTEXFLAGS. : $PDFLATEXCOMSTR, $PDFTEXCOMSTR. python Python . Python Action . scons 4.0 .. rmic rmic . : $JAVACLASSSUFFIX, $RMIC, $RMICCOM, $RMICFLAGS. : $RMICCOMSTR. rpcgen RPCGEN . : $RPCGEN, $RPCGENCLIENTFLAGS, $RPCGENFLAGS, $RPCGENHEADERFLAGS, $RPCGENSERVICEFLAGS, $RPCGENXDRFLAGS. sgiar SGI . : $AR, $ARCOMSTR, $ARFLAGS, $LIBPREFIX, $LIBSUFFIX, $SHLINK, $SHLINKFLAGS. : $ARCOMSTR, $SHLINKCOMSTR. sgic++ C++ SGI . : $CXX, $CXXFLAGS, $SHCXX, $SHOBJSUFFIX. sgicc C SGI . : $CXX, $SHOBJSUFFIX. sgilink SGI . : $LINK, $RPATHPREFIX, $RPATHSUFFIX, $SHLINKFLAGS. sunar Sun . : $AR, $ARCOM, $ARFLAGS, $LIBPREFIX, $LIBSUFFIX. : $ARCOMSTR. sunc++ C++ Sun . : $CXX, $CXXVERSION, $SHCXX, $SHCXXFLAGS, $SHOBJPREFIX, $SHOBJSUFFIX. suncc C Sun . : $CXX, $SHCCFLAGS, $SHOBJPREFIX, $SHOBJSUFFIX. sunf77 Fortran f77 Sun . : $F77, $FORTRAN, $SHF77, $SHF77FLAGS, $SHFORTRAN, $SHFORTRANFLAGS. sunf90 Fortran f90 Sun . : $F90, $FORTRAN, $SHF90, $SHF90FLAGS, $SHFORTRAN, $SHFORTRANFLAGS. sunf95 Fortran f95 Sun . : $F95, $FORTRAN, $SHF95, $SHF95FLAGS, $SHFORTRAN, $SHFORTRANFLAGS. sunlink Sun . : $RPATHPREFIX, $RPATHSUFFIX, $SHLINKFLAGS. swig SWIG . : $SWIG, $SWIGCFILESUFFIX, $SWIGCOM, $SWIGCXXFILESUFFIX, $SWIGDIRECTORSUFFIX, $SWIGFLAGS, $SWIGINCPREFIX, $SWIGINCSUFFIX, $SWIGPATH, $SWIGVERSION, $_SWIGINCFLAGS. : $SWIGCOMSTR. tar tar . : $TAR, $TARCOM, $TARFLAGS, $TARSUFFIX. : $TARCOMSTR. tex TeX . : $BIBTEX, $BIBTEXCOM, $BIBTEXFLAGS, $LATEX, $LATEXCOM, $LATEXFLAGS, $MAKEINDEX, $MAKEINDEXCOM, $MAKEINDEXFLAGS, $TEX, $TEXCOM, $TEXFLAGS. : $BIBTEXCOMSTR, $LATEXCOMSTR, $MAKEINDEXCOMSTR, $TEXCOMSTR. textfile Textfile Substfile . : $FILE_ENCODING, $LINESEPARATOR, $SUBSTFILEPREFIX, $SUBSTFILESUFFIX, $TEXTFILEPREFIX, $TEXTFILESUFFIX. : $SUBST_DICT. tlib tlib Borland . : $AR, $ARCOM, $ARFLAGS, $LIBPREFIX, $LIBSUFFIX. : $ARCOMSTR. xgettext gettext . SCons xgettext(1) . POTUpdate Template () PO . : $POTSUFFIX, $POTUPDATE_ALIAS, $XGETTEXTCOM, $XGETTEXTCOMSTR, $XGETTEXTFLAGS, $XGETTEXTFROM, $XGETTEXTFROMPREFIX, $XGETTEXTFROMSUFFIX, $XGETTEXTPATH, $XGETTEXTPATHPREFIX, $XGETTEXTPATHSUFFIX, $_XGETTEXTDOMAIN, $_XGETTEXTFROMFLAGS, $_XGETTEXTPATHFLAGS. : $POTDOMAIN. yacc yacc . : $YACC, $YACCCOM, $YACCFLAGS, $YACCHFILESUFFIX, $YACCHXXFILESUFFIX, $YACCVCGFILESUFFIX, $YACC_GRAPH_FILE_SUFFIX. : $YACCCOMSTR, $YACCFLAGS, $YACC_GRAPH_FILE, $YACC_HEADER_FILE. zip zip . : $ZIP, $ZIPCOM, $ZIPCOMPRESSION, $ZIPFLAGS, $ZIPSUFFIX. : $ZIPCOMSTR. (Builder Methods) (Builder methods) . Builder ( ) ( ) (construction environment) . Command (action) . SCons . Builder . Builders . (Pseudo-Builders) . Buildername(target, source, [key=val, ...]) target source . (construction variable) . Node . Split (whitespace) . SCons (resolve) . target source ( Node) ( Node) . o Node Node . o ( ) . o ( ) (volume) . o ( ) . o (Top-relative paths) # . ( SConstruct ) . . o UNC ( Windows) . \\server_name\share_name\file_path . file_path \\server_name\share_name . UNC . o URL pathlib Python . << >> . SCons SConscript ( SConstruct) . SConscriptChdir . srcdir ( ). Repository -Y/--repository SCons . ( ) VariantDir variant_dir= SConscript . . Windows DOS (volume) (:) . . (context) : SCons ( ) SCons . (top-relative) . Program : env.Program('bar', ['bar.c', 'foo.c']) env.Program('bar', Split('bar.c foo.c')) env.Program('bar', env.Split('bar.c foo.c')) env.Program(source=['bar.c', 'foo.c'], target='bar') env.Program(target='bar', source=Split('bar.c foo.c')) env.Program(target='bar', source=env.Split('bar.c foo.c')) env.Program('bar', source='bar.c foo.c'.split()) : SCons ( ). ( Python API SCons ) Node . SCons Node # . File Dir : CacheDir(Dir('#cache')). # The comments describing the targets that will be built # assume these calls are in a SConscript file in the # a subdirectory named "subdir". # Builds the program "subdir/foo" from "subdir/foo.c": env.Program('foo', 'foo.c') # Builds the program "/tmp/bar" from "subdir/bar.c": env.Program('/tmp/bar', 'bar.c') # An initial '#' or '#/' are equivalent; the following # calls build the programs "foo" and "bar" (in the # top-level SConstruct directory) from "subdir/foo.c" and # "subdir/bar.c", respectively: env.Program('#foo', 'foo.c') env.Program('#/bar', 'bar.c') # Builds the program "other/foo" (relative to the top-level # SConstruct directory) from "subdir/foo.c": env.Program('#other/foo', 'foo.c') # os.path.exists() is pure Python, so this fails: if os.path.exists('#inc/foo.h'): env.Append(CPPPATH='#inc') # create a Node to make it work: if os.path.exists(File('#inc/foo.h')): env.Append(CPPPATH='#inc') SCons ( ) target . (Builder) SCons / . (single-source) . . srcdir srcdir . build/prog ( build/prog.exe Windows) src/f1.c src/f2.c SConscript . env.Program('build/prog', ['f1.c', 'f2.c'], srcdir='src') parse_flags env.MergeFlags . 'include' $CPPPATH 'EBUG' $CPPDEFINES 'm' $LIBS : env.Program('hello', 'hello.c', parse_flags='-Iinclude -DEBUG -lm') chdir () (Builder) . chdir Node scons . chdir Node (true) scons . . # scons Copy "sub/dir" # env.Command( target='sub/dir/foo.out', source='sub/dir/foo.in', action=Copy('${TARGET.file}', '${SOURCE.file}'), chdir='sub/dir', ) # chdir scons # ("sub/dir") . env.Command(' target='sub/dir/foo.out', source='sub/dir/foo.in', action=Copy('${TARGET.file}', '${SOURCE.file}'), chdir=True ) Python . chdir SCons ( -j) (worker threads) SCons . SCons (construction variables) $TARGET $SOURCE chdir chdir . chdir ${TARGET.file} ${SOURCE.file} . (construction variable overrides) . . : env.Program('hello', 'hello.c', LIBS=['gl', 'glut']) : env.SharedLibrary( target='word', source='word.cpp', SHLIBSUFFIX='.ocx', LIBSUFFIXES=['.ocx'], ) scons $SHLIBSUFFIX $LIBSUFFIXES . scons (construction environment) : Program('hello', 'hello.c') SharedLibrary('word', 'word.cpp') (builder) << >> (Default Environment) scons . ( env. ) Python SConscript (import) Python : from SCons.Script import * Emitter ( "Builder Objects" $PROGEMITTER ). GNU -Map=mapfile (linker map file) . emitter Program mapfile . NodeList Node . (Nodes) ( "Node Objects" ). NodeList (source) SCons . (object file) : bar_obj_list = env.StaticObject('bar.c', CPPDEFINES='-DBAR') env.Program("prog", ['foo.c', bar_obj_list, 'main.c']) Node Program . NodeList Default : tgt = env.Program("prog", ["foo.c", "bar.c", "main.c"]) Default(tgt) (Node) NodeList ( bar_obj_list[0]). Node Python str ( str(bar_obj_list[0])). <<>> (flatten) bar_obj_list StaticObject . Python : foo = Object('foo.c') bar = Object('bar.c') objects = ['begin.o'] + foo + ['middle.o'] + bar + ['end.o'] for obj in objects: print(str(obj)) Flatten SCons Node : foo = Object('foo.c') bar = Object('bar.c') objects = Flatten(['begin.o', foo, 'middle.o', bar, 'end.o']) for obj in objects: print(str(obj)) Python Python (+ +=) Python . Python NodeList . Python SCons . extend Python (in-place) . : object_files = [] # Do NOT use += here: # object_files += Object('bar.c') # # It will not update the object_files list in place. # # Instead, use the list extend method: object_files.extend(Object('bar.c')) bar_obj_list = env.StaticObject('bar.c', CPPDEFINES='-DBAR') print("The path to bar_obj is:", str(bar_obj_list[0])) . SCons ( #include C ) . env.Depends (construction environment) . SCons C C++ Fortran (.F ( POSIX) .fpp .FPP) (.S ( POSIX) .spp .SPP) C . SCons D Java SWIG LaTeX . (Builders) . SCons Builder Builder . (Tool specification modules) Builder . Builder . - $BUILDERS . Builder . Builder (Default Environment) : Program('hello', 'hello.c') SharedLibrary('word', 'word.cpp') Builder SConscript ( scope) . Python import Python SConscript scope . import Python : from SCons.Script import *. SCons . CFile(), env.CFile() lex (.l) yacc (.y) C . $CFILESUFFIX ( .c) . : # builds foo.c env.CFile(target='foo.c', source='foo.l') # builds bar.c env.CFile(target='bar', source='bar.y') Command(), env.Command() Builder Command <> Builder . <<>> (one-off) Builder . Builder Builder Action . Command . CompilationDatabase(), env.CompilationDatabase() CompilationDatabase JSON clang ( LLVM[1] ). SCons . / C C++ $COMPILATIONDB_PATH_FILTER . SCons . compile_commands.json . scons <<>> . . target= source= . target= source= . . compilation_db / . scons 4.0 . CXXFile(), env.CXXFile() lex (.ll) yacc (.yy) C++ . $CXXFILESUFFIX ( .cc) . : # builds foo.cc env.CXXFile(target='foo.cc', source='foo.ll') # builds bar.cc env.CXXFile(target='bar', source='bar.yy') DocbookEpub(), env.DocbookEpub() (pseudo-Builder) Docbook EPUB . env = Environment(tools=['docbook']) env.DocbookEpub('manual.epub', 'manual.xml') env = Environment(tools=['docbook']) env.DocbookEpub('manual') DocbookHtml(), env.DocbookHtml() Docbook HTML . env = Environment(tools=['docbook']) env.DocbookHtml('manual.html', 'manual.xml') env = Environment(tools=['docbook']) env.DocbookHtml('manual') DocbookHtmlChunked(), env.DocbookHtmlChunked() Docbook HTML (chunked HTML) . base.dir . chunkfast.xsl ( "EXSLT") . : env = Environment(tools=['docbook']) env.DocbookHtmlChunked('manual') manual.xml . root.filename . "scons -c": env = Environment(tools=['docbook']) env.DocbookHtmlChunked('mymanual.html', 'manual', xsl='htmlchunk.xsl') base.dir . base_dir Builder : env = Environment(tools=['docbook']) env.DocbookHtmlChunked('manual', xsl='htmlchunk.xsl', base_dir='output/') ! DocbookHtmlhelp(), env.DocbookHtmlhelp() Docbook HTMLHELP . : env = Environment(tools=['docbook']) env.DocbookHtmlhelp('manual') manual.xml . root.filename . "scons -c": env = Environment(tools=['docbook']) env.DocbookHtmlhelp('mymanual.html', 'manual', xsl='htmlhelp.xsl') base.dir . base_dir Builder : env = Environment(tools=['docbook']) env.DocbookHtmlhelp('manual', xsl='htmlhelp.xsl', base_dir='output/') ! DocbookMan(), env.DocbookMan() pseudo-Builder Docbook (Man page) . : env = Environment(tools=['docbook']) env.DocbookMan('manual') manual.xml . refname XML . DocbookPdf(), env.DocbookPdf() pseudo-Builder Docbook PDF . env = Environment(tools=['docbook']) env.DocbookPdf('manual.pdf', 'manual.xml') : env = Environment(tools=['docbook']) env.DocbookPdf('manual') DocbookSlidesHtml(), env.DocbookSlidesHtml() pseudo-Builder Docbook HTML . env = Environment(tools=['docbook']) env.DocbookSlidesHtml('manual') titlefoil.html . "scons -c": env = Environment(tools=['docbook']) env.DocbookSlidesHtml('mymanual.html','manual', xsl='slideshtml.xsl') base.dir . base_dir : env = Environment(tools=['docbook']) env.DocbookSlidesHtml('manual', xsl='slideshtml.xsl', base_dir='output/') (trailing slash) ! DocbookSlidesPdf(), env.DocbookSlidesPdf() pseudo-Builder Docbook PDF . env = Environment(tools=['docbook']) env.DocbookSlidesPdf('manual.pdf', 'manual.xml') : env = Environment(tools=['docbook']) env.DocbookSlidesPdf('manual') DocbookXInclude(), env.DocbookXInclude() pseudo-Builder XIncludes . env = Environment(tools=['docbook']) env.DocbookXInclude('manual_xincluded.xml', 'manual.xml') DocbookXslt(), env.DocbookXslt() pseudo-Builder XSL . env = Environment(tools=['docbook']) env.DocbookXslt('manual_transformed.xml', 'manual.xml', xsl='transform.xslt') xsl . DVI(), env.DVI() .dvi .tex .ltx .latex . .tex scons \documentclass \documentstyle LaTeX $LATEXCOM $TEXCOM . LaTeX DVI .aux bibdata $BIBTEX .ind $MAKEINDEX .log $LATEXCOM . .dvi ( TeX ) . : # builds from aaa.tex env.DVI(target = 'aaa.dvi', source = 'aaa.tex') # builds bbb.dvi env.DVI(target = 'bbb', source = 'bbb.ltx') # builds from ccc.latex env.DVI(target = 'ccc.dvi', source = 'ccc.latex') Gs(), env.Gs() gs. gs gsos2 gswin32c . env = Environment(tools=['gs']) env.Gs( 'cover.jpg', 'scons-scons.pdf', GSFLAGS='-dNOPAUSE -dBATCH -sDEVICE=jpeg -dFirstPage=1 -dLastPage=1 -q', ) Install(), env.Install() . . . env.Install(target='/usr/local/bin', source=['foo', 'bar']) Install ( InstallAs InstallVersionedLib) <<>> scons ( SConstruct ) . Default . --install-sandbox . <<>> . FindInstalledFiles. ( (Command-Line Targets) (Installing Files) (Alias Targets)). InstallAs(), env.InstallAs() . . env.InstallAs(target='/usr/local/bin/foo', source='foo_debug') env.InstallAs(target=['../lib/libfoo.a', '../lib/libbar.a'], source=['libFOO.a', 'libBAR.a']) Install . InstallVersionedLib(), env.InstallVersionedLib() . . env.InstallVersionedLib(target='/usr/local/bin/foo', source='libxyz.1.5.2.so') Install . Jar(), env.Jar() (.jar) . .class . .java Java .class . $JARCHDIR jar -C . $JARCHDIR SCons .class Java . Manifest-Version m jar . env.Jar(target = 'foo.jar', source = 'classes') env.Jar(target = 'bar.jar', source = ['bar1.java', 'bar2.java']) Java(), env.Java() . .java .java . SCons .java ( ) .class . . SCons (package) package .class . Foo.java Foo sub.dir sub/dir/Foo.class . : env.Java(target='classes', source='src') env.Java(target='classes', source=['src1', 'src2']) env.Java(target='classes', source=['File1.java', 'File2.java']) . SCons ASCII . LANG . (hard-code) . env = Environment() env['ENV']['LANG'] = 'en_GB.UTF-8' JavaH(), env.JavaH() C (native) . . .class .java Java .class Java . $JAVACLASSDIR JavaH .class . : # builds java_native.h classes = env.Java(target="classdir", source="src") env.JavaH(target="java_native.h", source=classes) # builds include/package_foo.h and include/package_bar.h env.JavaH(target="include", source=["package/foo.class", "package/bar.class"]) # builds export/foo.h and export/bar.h env.JavaH( target="export", source=["classes/foo.class", "classes/bar.class"], JAVACLASSDIR="classes", ) 10.0 javah / JNI ( JEP 313[2]) . SCons javah . $JAVAH ( javac) $JAVAHFLAGS ( -h) javac .java .class. Library(), env.Library() StaticLibrary. LoadableModule(), env.LoadableModule() SharedLibrary . Mac OS X (Darwin) (loadable module bundle) . M4(), env.M4() M4 . -E $M4FLAGS m4 . : env.M4(target = 'foo.c', source = 'foo.c.m4') MOFiles(), env.MOFiles() msgfmt . PO MO . MOFiles . source $LINGUAS_FILE . . pl.mo en.mo pl.po en.po: env.MOFiles(['pl', 'en']) . LINGUAS: env.MOFiles(LINGUAS_FILE=True) . pl.mo en.mo pl.po en.po LINGUAS: env.MOFiles(['pl', 'en'], LINGUAS_FILE=True) . LINGUAS ( ): env['LINGUAS_FILE'] = True env.MOFiles() MSVSProject(), env.MSVSProject() (solution) Microsoft Visual C++ . Microsoft Visual C++ Visual Studio ( MSBuild) : $MSVC_VERSION . Visual Studio 6.0 .dsp . .vcproj . Visual Studio 2010 .vcxproj . - $MSVC_VERSION . SCons ( .csproj #C .vbproj Visual Basic .pyproject Python). .vcxproj (XML Schema) MSBuild : https://learn.microsoft.com/en-us/cpp/build/reference/vcxproj-file-structure[3]. Visual Studio MSBuild SCons . (toolset) SCons . Visual Studio SCons $MSVC_VERSION . SCons Visual Studio ( MSBuild) . SCons - scons-local . $SCONS_HOME SCons (import) . . auto_build_solution=0 MSVSProject . MSVSSolution . MSVSSolution . MSVSProject . srcs incs localincs resources misc . (File Nodes) SCons ( Glob MSVSProject ). Visual Studio MSBuild SCons . . : target .dsp .vcproj. Visual Studio $MSVSPROJECTSUFFIX ( ). variant (variant) . Visual Studio 6 . "Debug" "Release" . Visual Studio 7 | ( ) : Debug|Xbox. Win32 . MSVSProject . cmdargs . cmdargs variant ( ). . cppdefines . cppdefines variant ( ). SCons $CPPDEFINES . cppflags . /std:c++ /Zc:__cplusplus Intellisense /std:c++ . cppflags variant ( ). . SCons $CCFLAGS $CXXFLAGS $CPPFLAGS . cpppaths include . cpppaths variant ( ). . SCons $CPPPATH . buildtarget (node) ( ) Visual Studio . buildtarget variant . runfile Visual Studio 7 . Output Microsoft Visual C++ . buildtarget . SCons Microsoft Visual Studio : SCons SConstruct SConstruct Visual Studio . Microsoft Visual C++ /FC $CCFLAGS . Visual Studio Visual Studio () SCons () SCons . SConscript . MSBuild ( <> Visual Studio) SCons MSVSProject (hard-code) . MSVSProject . solution MSBuild . Visual Studio SCons . SCons - num_jobs SetOption . : barsrcs = ['bar.cpp'] barincs = ['bar.h'] barlocalincs = ['StdAfx.h'] barresources = ['bar.rc', 'resource.h'] barmisc = ['bar_readme.txt'] dll = env.SharedLibrary(target='bar.dll', source=barsrcs) buildtarget = [s for s in dll if str(s).endswith('dll')] env.MSVSProject( target='Bar' + env['MSVSPROJECTSUFFIX'], srcs=barsrcs, incs=barincs, localincs=barlocalincs, resources=barresources, misc=barmisc, buildtarget=buildtarget, variant='Release', ) DebugSettings .vcproj.user .vcxproj.user . cmdargs DebugSettings . . 2.4: DebugSettings . Visual Studio v9.0 Visual Studio v11 . DebugSettings MSVS . . DebugSettings : # Assuming you store your defaults in a file vars = Variables('variables.py') msvcver = vars.args.get('vc', '9') # Check command args to force one Microsoft Visual Studio version if msvcver == '9' or msvcver == '11': env = Environment(MSVC_VERSION=msvcver + '.0', MSVC_BATCH=False) else: env = Environment() AddOption( '--userfile', action='store_true', dest='userfile', default=False, help="Create Visual C++ project file", ) # # 1. Configure your Debug Setting dictionary with options you want in the list # of allowed options, for instance if you want to create a user file to launch # a specific application for testing your dll with Microsoft Visual Studio 2008 (v9): # V9DebugSettings = { 'Command': 'c:\\myapp\\using\\thisdll.exe', 'WorkingDirectory': 'c:\\myapp\\using\\', 'CommandArguments': '-p password', # 'Attach':'false', # 'DebuggerType':'3', # 'Remote':'1', # 'RemoteMachine': None, # 'RemoteCommand': None, # 'HttpUrl': None, # 'PDBPath': None, # 'SQLDebugging': None, # 'Environment': '', # 'EnvironmentMerge':'true', # 'DebuggerFlavor': None, # 'MPIRunCommand': None, # 'MPIRunArguments': None, # 'MPIRunWorkingDirectory': None, # 'ApplicationCommand': None, # 'ApplicationArguments': None, # 'ShimCommand': None, # 'MPIAcceptMode': None, # 'MPIAcceptFilter': None, } # # 2. Because there are a lot of different options depending on the Microsoft # Visual Studio version, if you use more than one version you have to # define a dictionary per version, for instance if you want to create a user # file to launch a specific application for testing your dll with Microsoft # Visual Studio 2012 (v11): # V10DebugSettings = { 'LocalDebuggerCommand': 'c:\\myapp\\using\\thisdll.exe', 'LocalDebuggerWorkingDirectory': 'c:\\myapp\\using\\', 'LocalDebuggerCommandArguments': '-p password', # 'LocalDebuggerEnvironment': None, # 'DebuggerFlavor': 'WindowsLocalDebugger', # 'LocalDebuggerAttach': None, # 'LocalDebuggerDebuggerType': None, # 'LocalDebuggerMergeEnvironment': None, # 'LocalDebuggerSQLDebugging': None, # 'RemoteDebuggerCommand': None, # 'RemoteDebuggerCommandArguments': None, # 'RemoteDebuggerWorkingDirectory': None, # 'RemoteDebuggerServerName': None, # 'RemoteDebuggerConnection': None, # 'RemoteDebuggerDebuggerType': None, # 'RemoteDebuggerAttach': None, # 'RemoteDebuggerSQLDebugging': None, # 'DeploymentDirectory': None, # 'AdditionalFiles': None, # 'RemoteDebuggerDeployDebugCppRuntime': None, # 'WebBrowserDebuggerHttpUrl': None, # 'WebBrowserDebuggerDebuggerType': None, # 'WebServiceDebuggerHttpUrl': None, # 'WebServiceDebuggerDebuggerType': None, # 'WebServiceDebuggerSQLDebugging': None, } # # 3. Select the dictionary you want depending on the version of Visual Studio # Files you want to generate. # if not env.GetOption('userfile'): dbgSettings = None elif env.get('MSVC_VERSION', None) == '9.0': dbgSettings = V9DebugSettings elif env.get('MSVC_VERSION', None) == '11.0': dbgSettings = V10DebugSettings else: dbgSettings = None # # 4. Add the dictionary to the DebugSettings keyword. # barsrcs = ['bar.cpp', 'dllmain.cpp', 'stdafx.cpp'] barincs = ['targetver.h'] barlocalincs = ['StdAfx.h'] barresources = ['bar.rc', 'resource.h'] barmisc = ['ReadMe.txt'] dll = env.SharedLibrary(target='bar.dll', source=barsrcs) env.MSVSProject( target='Bar' + env['MSVSPROJECTSUFFIX'], srcs=barsrcs, incs=barincs, localincs=barlocalincs, resources=barresources, misc=barmisc, buildtarget=[dll[0]] * 2, variant=('Debug|Win32', 'Release|Win32'), cmdargs=f'vc={msvcver}', DebugSettings=(dbgSettings, {}), ) MSVSSolution(), env.MSVSSolution() (Solution) Microsoft Visual Studio . Visual Studio Visual Studio : $MSVC_VERSION . Visual Studio 6 .dsw . Visual Studio .NET 2002 .sln . - $MSVC_VERSION . https://learn.microsoft.com/en-us/visualstudio/extensibility/internals/solution-dot-sln-file[4] . : target .dsw .sln. Visual Studio $MSVSSOLUTIONSUFFIX ( ). variant (variant) ( MSVS 7 ). "Debug" "Release" . MSVS 7 "Debug|Xbox". Win32 . projects Project MSVSProject . File Node SCons. MSBuild Visual Studio Node SCons . : auto_filter_projects projects . projects Project Visual Studio (VS IDE) . projects (exception) . auto_filter_projects : None projects . None . True True projects . False False projects . . VS IDE VS IDE Project . : env.MSVSSolution( target="Bar" + env["MSVSSOLUTIONSUFFIX"], projects=["bar" + env["MSVSPROJECTSUFFIX"]], variant="Release", ) Ninja(), env.Ninja() Ninja . . . # On the command line --experimental=ninja # Or in your SConstruct SetOption('experimental', 'ninja') (deprecation cycle) / . ninja Python import : python -m pip install ninja ninja.build . scons <<>> . . target= source= . target= source= . . scons 4.2 . Object(), env.Object() StaticObject. Package(), env.Package() . (package) . packaging . : env = Environment(tools=['default', 'packaging']) SCons . $PACKAGETYPE --package-type . SCons . : env.Package(PACKAGETYPE=['src_zip', 'src_targz'], ...other args...) : +-----------+-----------------------------+ |msi | Microsoft | | | Installer | +-----------+-----------------------------+ |rpm | RPM Package | | | Manager | +-----------+-----------------------------+ |ipkg | Itsy | | | Package Management | +-----------+-----------------------------+ |tarbz2 | tar | | | | | | bzip2 | +-----------+-----------------------------+ |targz | tar | | | | | | gzip | +-----------+-----------------------------+ |tarxz | tar | | | | | | xz | +-----------+-----------------------------+ |zip | zip | +-----------+-----------------------------+ |src_tarbz2 | tar | | | | | | bzip2 | | | | | | | | | | | | | | | | +-----------+-----------------------------+ |src_targz | tar | | | | | | gzip | | | | | | | | | | | | | +-----------+-----------------------------+ |src_tarxz | tar | | | | | | xz | | | | | | | | | | | | | +-----------+-----------------------------+ |src_zip | zip | | | | | | | | | | | | | | | | +-----------+-----------------------------+ source . FindInstalledFiles Install InstallAs InstallVersionedLib . target () () . . Package Tag ( (Nodes) ) . . . $PACKAGEROOT - . : env = Environment(tools=["default", "packaging"]) env.Install("/bin/", "my_program") env.Package( NAME="foo", VERSION="1.2.3", PACKAGEVERSION=0, PACKAGETYPE="rpm", LICENSE="gpl", SUMMARY="balalalalal", DESCRIPTION="this should be really really long", X_RPM_GROUP="Application/fu", SOURCE_URL="https://foo.org/foo-1.2.3.tar.gz", ) /bin/my_program Install . source Package . $PACKAGEROOT /bin $PACKAGEROOT . PCH(), env.PCH() Microsoft Visual C++ . : PCH . . PCH $PCH : env['PCH'] = env.PCH('StdAfx.cpp')[0] PCH Microsoft Visual C++ . PCH . Microsoft Visual C++ . ++C . C ++C . PCH cl.exe ++C PCH C cl.exe . ++C PCH . SCons PCH ( MSVC 11.0 ) . Glob . PDF(), env.PDF() .pdf .dvi ( .tex .ltx .latex) . $PDFSUFFIX ( .pdf) . PDF . : # builds from aaa.tex env.PDF(target = 'aaa.pdf', source = 'aaa.tex') # builds bbb.pdf from bbb.dvi env.PDF(target = 'bbb', source = 'bbb.dvi') POInit(), env.POInit() msginit . $POAUTOINIT () PO . $POAUTOINIT ( ) POInit ( ) PO . POInit POUpdate . POUpdate msgmerge(1) msginit(1) . POInit msginit(1) ( PO) . POInit . $LINGUAS_FILE source . POInit ( '.' ) Alias ( 'po-create') . $POCREATE_ALIAS . PO POInit scons po-create . . en.po pl.po messages.pot: env.POInit(['en', 'pl']) # messages.pot --> [en.po, pl.po] . en.po pl.po foo.pot: env.POInit(['en', 'pl'], ['foo']) # foo.pot --> [en.po, pl.po] . en.po pl.po foo.pot $POTDOMAIN: env.POInit(['en', 'pl'], POTDOMAIN='foo') # foo.pot --> [en.po, pl.po] . PO LINGUAS. messages.pot : env.POInit(LINGUAS_FILE=True) # needs 'LINGUAS' file . PO en.po pl.pl LINGUAS. messages.pot : env.POInit(['en', 'pl'], LINGUAS_FILE=True) . PO : env['POAUTOINIT'] = True env['LINGUAS_FILE'] = True env['POTDOMAIN'] = 'foo' env.POInit() : env.POInit(POAUTOINIT=True, LINGUAS_FILE=True, POTDOMAIN='foo') PostScript(), env.PostScript() .ps .dvi ( .tex .ltx .latex) . $PSSUFFIX ( .ps) . PostScript . : # builds from aaa.tex env.PostScript(target = 'aaa.ps', source = 'aaa.tex') # builds bbb.ps from bbb.dvi env.PostScript(target = 'bbb', source = 'bbb.dvi') POTUpdate(), env.POTUpdate() xgettext gettext . POT . ( scons .) ( POT ) . ( messages.pot) ( pot-update $POTUPDATE_ALIAS ) scons pot-update / . ( POT ) . xgettext(1) xgettext ( POT ). . xgettext(1) POT . . po/ SConstruct : # SConstruct in 'po/' subdir env = Environment(tools=['default', 'xgettext']) env.POTUpdate(['foo'], ['../a.cpp', '../b.cpp']) env.POTUpdate(['bar'], ['../c.cpp', '../d.cpp']) scons : $ scons # Does not create foo.pot nor bar.pot $ scons foo.pot # Updates or creates foo.pot $ scons pot-update # Updates or creates foo.pot and bar.pot $ scons -c # Does not clean foo.pot nor bar.pot. . . target messages.pot . $POTDOMAIN POTUpdate : # SConstruct script env = Environment(tools=['default', 'xgettext']) env['POTDOMAIN'] = "foo" env.POTUpdate(source=["a.cpp", "b.cpp"]) # Creates foo.pot ... env.POTUpdate(POTDOMAIN="bar", source=["c.cpp", "d.cpp"]) # and bar.pot . source POTFILES.in : # POTFILES.in in 'po/' subdirectory ../a.cpp ../b.cpp # end of file (POTFILES.in) $XGETTEXTFROM : # SConstruct file in 'po/' subdirectory env = Environment(tools=['default', 'xgettext']) env.POTUpdate(XGETTEXTFROM='POTFILES.in') . $XGETTEXTPATH . a.cpp b.cpp po/SConstruct po/POTFILES.in . POT : # POTFILES.in in 'po/' subdirectory a.cpp b.cpp # end of file # SConstruct file in 'po/' subdirectory env = Environment(tools=['default', 'xgettext']) env.POTUpdate(XGETTEXTFROM='POTFILES.in', XGETTEXTPATH='../') . XGETTEXTPATH=['dir1', 'dir2', ...]. . . 0/1/po/SConstruct : # SConstruct file in '0/1/po/' subdirectory env = Environment(tools=['default', 'xgettext']) env.POTUpdate(XGETTEXTFROM='POTFILES.in', XGETTEXTPATH=['../', '../../']) 0/1/po/POTFILES.in: # POTFILES.in in '0/1/po/' subdirectory a.cpp # end of file *.cpp 0/a.cpp : /* 0/a.cpp */ gettext("Hello from ../../a.cpp") 0/1/a.cpp : /* 0/1/a.cpp */ gettext("Hello from ../a.cpp") scons . 0/1/po/messages.pot "Hello from ../a.cpp" . $XGETTEXTFOM SConscript : # SConstruct file in '0/1/po/' subdirectory env = Environment(tools=['default', 'xgettext']) env.POTUpdate(XGETTEXTFROM='POTFILES.in', XGETTEXTPATH=['../../', '../']) messages.pot msgid "Hello from ../../a.cpp" msgid "Hello from ../a.cpp". POUpdate(), env.POUpdate() msgmerge gettext . PO msgmerge(1) PO msginit POInit ( $POAUTOINIT). POUpdate . source $LINGUAS_FILE . ( scons .). Alias ( 'po-update') . $POUPDATE_ALIAS . PO scons po-update . POUpdate POInit po-create . . en.po pl.po messages.pot ( $POTDOMAIN) ( POTUpdate): env.POUpdate(['en','pl']) # messages.pot --> [en.po, pl.po] . en.po pl.po foo.pot: env.POUpdate(['en', 'pl'], ['foo']) # foo.pot --> [en.po, pl.pl] . en.po pl.po foo.pot ( ): env.POUpdate(['en', 'pl'], POTDOMAIN='foo') # foo.pot -- > [en.po, pl.pl] . LINGUAS. messages.pot : env.POUpdate(LINGUAS_FILE=True) # needs 'LINGUAS' file . foo.pot: env.POUpdate(LINGUAS_FILE=True, source=['foo']) . en.po pl.po LINGUAS. messages.pot : # produce 'en.po', 'pl.po' + files defined in 'LINGUAS': env.POUpdate(['en', 'pl' ], LINGUAS_FILE=True) . $POAUTOINIT PO : env.POUpdate(LINGUAS_FILE=True, POAUTOINIT=True) . PO LINGUAS. foo.pot . . env['POAUTOINIT'] = True env['LINGUAS_FILE'] = True env['POTDOMAIN'] = 'foo' env.POUpdate() Program(), env.Program() C C++ D Fortran . C C++ D Fortran Object . $PROGPREFIX ( ) $PROGSUFFIX ( .exe Windows POSIX) . : env.Program(target='foo', source=['foo.o', 'bar.c', 'baz.f']) ProgramAllAtOnce(), env.ProgramAllAtOnce() D . D C C++ D Object Program scons . D - (whole source meta-programming) ( ). D (link) . . env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d']) mod_a mod_b mod_c . D executable.o . RES(), env.RES() (resource file) Microsoft Visual C++ . Microsoft Visual C++ MinGW . .res ( .o MinGW) . C . : env.RES('resource.rc') RMIC(), env.RMIC() stub skeleton .class . stub skeleton . .class Java . $JAVACLASSDIR RMIC .class . classes = env.Java(target='classdir', source='src') env.RMIC(target='outdir1', source=classes) env.RMIC( target='outdir2', source=['package/foo.class', 'package/bar.class'], ) env.RMIC( target='outdir3', source=['classes/foo.class', 'classes/bar.class'], JAVACLASSDIR='classes', ) RPCGenClient(), env.RPCGenClient() stub RPC (_clnt.c) RPC (.x) . rpcgen . # Builds src/rpcif_clnt.c env.RPCGenClient('src/rpcif.x') RPCGenHeader(), env.RPCGenHeader() RPC (.h) RPC (.x) . rpcgen . # Builds src/rpcif.h env.RPCGenHeader('src/rpcif.x') RPCGenService(), env.RPCGenService() RPC (_svc.c) RPC (.x) . rpcgen . # Builds src/rpcif_svc.c env.RPCGenClient('src/rpcif.x') RPCGenXDR(), env.RPCGenXDR() RPC XDR (_xdr.c) RPC (.x) . rpcgen . # Builds src/rpcif_xdr.c env.RPCGenClient('src/rpcif.x') SharedLibrary(), env.SharedLibrary() / C C++ D Fortran . source . source ( SharedObject). scons . $SHLIBPREFIX ( lib POSIX Windows) $SHLIBSUFFIX ( .dll Windows .so POSIX) ( ) . POSIX $SHLIBVERSION ( ) . : env.SharedLibrary(target='bar', source=['bar.c', 'foo.o']) Windows SharedLibrary (.dll) (.lib) .lib .lib . Cygwin SharedLibrary (.dll) (.dll.a) .dll.a .dll.a . ( ) ( ) . LoadableModule . $SHLIBVERSION . $SHLINKFLAGS . env.SharedLibrary(target='bar', source=['bar.c', 'foo.o'], SHLIBVERSION='1.5.2') POSIX ( ) : SHLIBVERSION="1" ( ) libbar.so.1 libbar.so . ( ): SHLIBVERSION="1.5.2" libbar.so.1.5.2 libbar.so libbar.so.1 . Darwin (OSX) libbar.1.5.2.dylib libbar.dylib . Windows register=1 .dll . $REGSVR ( regsvr32) $REGSVRFLAGS . $REGSVRFLAGS /s . $REGSVRFLAGS /s . env.SharedLibrary(target='bar', source=['bar.cxx', 'foo.obj'], register=1) bar.dll COM . SharedObject(), env.SharedObject() . StaticObject . $SHOBJPREFIX ( $OBJPREFIX) $SHOBJSUFFIX . SharedObject . : env.SharedObject(target='ddd', source='ddd.c') env.SharedObject(target='eee.o', source='eee.cpp') env.SharedObject(target='fff.obj', source='fff.for') env.SharedObject(source=Glob('*.c')) () () ( -fPIC gcc). SCons . SourceFileScanner . "Scanner Objects" . StaticLibrary(), env.StaticLibrary() C C++ D Fortran . . $LIBPREFIX ( lib POSIX Windows) $LIBSUFFIX ( .lib Windows .a POSIX) . : env.StaticLibrary(target='bar', source=['bar.c', 'foo.o']) source ( StaticObject). scons . StaticObject(), env.StaticObject() C C++ D Fortran . : .asm .ASM .c C .C Windows: C POSIX: C++ .cc C++ .cpp C++ .cxx C++ .cxx C++ .c++ C++ .C++ C++ .d D .f Fortran .F Windows: Fortran POSIX: Fortran + C .for Fortran .FOR Fortran .fpp Fortran + C .FPP Fortran + C .m Object C .mm Object C++ .s .S Windows: ARM: CodeSourcery Sourcery Lite .sx + C POSIX: + C .spp + C .SPP + C $OBJPREFIX ( ) $OBJSUFFIX (.obj Windows .o POSIX) . StaticObject . : env.StaticObject(target='aaa', source='aaa.c') env.StaticObject(target='bbb.o', source='bbb.c++') env.StaticObject(target='ccc.obj', source='ccc.f') env.StaticObject(source=Glob('*.c')) SourceFileScanner . "Scanner Objects" . Substfile(), env.Substfile() Substfile ( ) $SUBST_DICT ( ) . $LINESEPARATOR . . Textfile . "utf-8" $FILE_ENCODING . : .in . $SUBSTFILEPREFIX $SUBSTFILESUFFIX ( ) . $SUBST_DICT Python (key, value) . . Python . . subst . env = Environment(tools=['default']) env['prefix'] = '/usr/bin' script_dict = {'@prefix@': '/bin', '@exec_prefix@': '$prefix'} env.Substfile('script.in', SUBST_DICT=script_dict) conf_dict = {'%VERSION%': '1.2.3', '%BASE%': 'MyProg'} env.Substfile('config.h.in', conf_dict, SUBST_DICT=conf_dict) # UNPREDICTABLE - one key is a prefix of another bad_foo = {'$foo': '$foo', '$foobar': '$foobar'} env.Substfile('foo.in', SUBST_DICT=bad_foo) # PREDICTABLE - keys are applied longest first good_foo = [('$foobar', '$foobar'), ('$foo', '$foo')] env.Substfile('foo.in', SUBST_DICT=good_foo) # UNPREDICTABLE - one substitution could be further expanded bad_bar = {'@bar@': '@soap@', '@soap@': 'lye'} env.Substfile('bar.in', SUBST_DICT=bad_bar) # PREDICTABLE - substitutions are expanded in order good_bar = (('@bar@', '@soap@'), ('@soap@', 'lye')) env.Substfile('bar.in', SUBST_DICT=good_bar) # the SUBST_DICT may be in common (and not an override) substutions = {} subst = Environment(tools=['textfile'], SUBST_DICT=substitutions) substitutions['@foo@'] = 'foo' subst['SUBST_DICT']['@bar@'] = 'bar' subst.Substfile( 'pgm1.c', [Value('#include "@foo@.h"'), Value('#include "@bar@.h"'), "common.in", "pgm1.in"], ) subst.Substfile( 'pgm2.c', [Value('#include "@foo@.h"'), Value('#include "@bar@.h"'), "common.in", "pgm2.in"], ) Tar(), env.Tar() tar / . Tar . scons . env.Tar('src.tar', 'src') # Create the stuff.tar file. env.Tar('stuff', ['subdir1', 'subdir2']) # Also add "another" to the stuff.tar file. env.Tar('stuff', 'another') # Set TARFLAGS to create a gzip-filtered archive. env = Environment(TARFLAGS = '-c -z') env.Tar('foo.tar.gz', 'foo') # Also set the suffix to .tgz. env = Environment(TARFLAGS = '-c -z', TARSUFFIX = '.tgz') env.Tar('foo') Textfile(), env.Textfile() Textfile $SUBST_DICT - Substfile . $LINESEPARATOR . . Python : Python Value . $TEXTFILEPREFIX $TEXTFILESUFFIX ( .txt) . "utf-8" $FILE_ENCODING . : # builds/writes foo.txt env.Textfile(target='foo.txt', source=['Goethe', 42, 'Schiller']) # builds/writes bar.txt env.Textfile(target='bar', source=['lalala', 'tanteratei'], LINESEPARATOR='|*') # nested lists are flattened automatically env.Textfile(target='blob', source=['lalala', ['Goethe', 42, 'Schiller'], 'tanteratei']) # files may be used as input by wrapping them in File() env.Textfile( target='concat', # concatenate files with a marker between source=[File('concat1'), File('concat2')], LINESEPARATOR='====================\n', ) : foo.txt Goethe 42 Schiller bar.txt lalala|*tanteratei blob.txt lalala Goethe 42 Schiller tanteratei Translate(), env.Translate() gettext . POT ( ) PO ( ) . $POAUTOINIT PO ( ). $LINGUAS_FILE $POTDOMAIN . POTUpdate POUpdate . . SCons Translate : # SConscript in 'po/' directory env = Environment(tools=["default", "gettext"]) env['POAUTOINIT'] = True env.Translate(['en', 'pl'], ['../a.cpp', '../b.cpp']) . autotools POTFILES.in LINGUAS : # LINGUAS en pl # end # POTFILES.in a.cpp b.cpp # end # SConscript env = Environment(tools=["default", "gettext"]) env['POAUTOINIT'] = True env['XGETTEXTPATH'] = ['../'] env.Translate(LINGUAS_FILE=True, XGETTEXTFROM='POTFILES.in') . / SCons ( PO) () (variant directories) PO MO MO . << >> LINGUAS . POT PO (commit) ( ). po/ LINGUAS . . : project/ + SConstruct + build/ + src/ + po/ + SConscript + SConscript.i18n + POTFILES.in + LINGUAS build . SConstruct : # SConstruct env = Environment(tools=["default", "gettext"]) VariantDir('build', 'src', duplicate=False) env['POAUTOINIT'] = True SConscript('src/po/SConscript.i18n', exports='env') SConscript('build/po/SConscript', exports='env') src/po/SConscript.i18n : # src/po/SConscript.i18n Import('env') env.Translate(LINGUAS_FILE=True, XGETTEXTFROM='POTFILES.in', XGETTEXTPATH=['../']) src/po/SConscript # src/po/SConscript Import('env') env.MOFiles(LINGUAS_FILE=True) POT PO src/po/ MO build/po/ . POT PO () ( MO) . scons . PO . scons po-update () scons . MO . TypeLibrary(), env.TypeLibrary() (.tlb) IDL (.idl) . (stub) .idl . env.TypeLibrary(source="foo.idl") foo.tlb foo.h foo_i.c foo_p.c foo_data.c . Zip(), env.Zip() zip / . Zip . scons (Builder) . env.Zip('src.zip', 'src') # Create the stuff.zip file. env.Zip('stuff', ['subdir1', 'subdir2']) # Also add "another" to the stuff.tar file. env.Zip('stuff', 'another') SCons (SCons Functions and Environment Methods) SCons . . . : Function(arguments, [optional arguments, ...]) # Global function env.Function(arguments, [optional arguments, ...]) # Environment method ([]) (...) . (positional) (keyword) . - (/) - (*) . keyword=value . . (construction variable) (exception) . : 1. "" Default Environment . . 2. ( ) (construction variable expansion) . Default('$MYTARGET') '$MYTARGET' MYTARGET env 'mine' env.Default('$MYTARGET' 'mine' . Construction variables . (scope) SConscript . Python import SConscript . import Python : from SCons.Script import *. SCons . AddMethod . Action(action, [output, [var, ...]] [key=value, ...]), env.Action(action, [output, [var, ...]] [key=value, ...]) (factory function) Action action . "Action Objects" . env.Action action env.Action . Action Action . AddMethod(object, function, [name]), env.AddMethod(function, [name]) function . function . name function . AddMethod Environment . env.AddMethod . env.Clone . : # Function to add must accept an instance argument. # The Python convention is to call this 'self'. def my_method(self, arg): print("my_method() got", arg) # Use the global function to add a method to the Environment class: AddMethod(Environment, my_method) env = Environment() env.my_method('arg') # Use the optional name argument to set the name of the method: env.AddMethod(my_method, 'other_method_name') env.other_method_name('another arg') AddOption(opt_str, ..., attr=value, ...) ( ) . opt_str . OptionParser.add_option Python optparse . optparse[5] . AddOption "Local Options" . add_option optparse AddOption nargs '?' ( ) . const . default default AddOption None . optparse . add_option --devicename --device --dev . AddOption . AddOption . AddOption GetOption env.GetOption . settable=True AddOption SConscript SetOption env.SetOption . SConscript . 4.8.0: settable SetOption . help AddOption . -h ( -H). Local Options . - AddOption . : AddOption( '--prefix', dest='prefix', nargs=1, type='string', action='store', metavar='DIR', help='installation prefix', ) env = Environment(PREFIX=GetOption('prefix')) : Local Options: --prefix=DIR installation prefix Help Help . 4.11.0 AddOption (whitespace) . (--opt arg --opt=arg) (nargs) . SCons . AddPostAction(target, action), env.AddPostAction(target, action) action target . action Action Action . "Action Objects" . . foo = Program('foo.c') # remove execute permission from binary: AddPostAction(foo, Chmod('$TARGET', "a-x")) target Alias action . AddPreAction(target, action), env.AddPreAction(target, action) action target . action Action Action . <> . () . () . - Program .c scons (pre-action) (link) . : foo = Program('foo.c') AddPreAction(foo, 'echo "Running pre-action"') $ scons -Q gcc -o foo.o -c foo.c echo "Running pre-action" Running pre-action gcc -o foo foo.o target Alias action ( ) . Alias(alias, [source, [action]]), env.Alias(alias, [source, [action]]) Alias source . . Alias Node . alias source Node Node alias Node Alias . source "Nothing to be done." . SConscript () . action (out-of-date) . Alias alias / action . Alias Node () . . : Alias('install') Alias('install', '/usr/bin') Alias(['install', 'install-lib'], '/usr/local/lib') env.Alias('install', ['/usr/local/bin', '/usr/local/lib']) env.Alias('install', ['/usr/local/man']) env.Alias('update', ['file1', 'file2'], "update_database $SOURCES") AllowSubstExceptions([exception, ...]) (construction variables) . NameError IndexError '' ( ) scons . . AllowSubstExceptions . . : # Requires that all construction variable names exist. # (You may wish to do this if you want to enforce strictly # that all construction variables must be defined before use.) AllowSubstExceptions() # Also allow a string containing a zero-division expansion # like '${1 / 0}' to evaluate to ''. AllowSubstExceptions(IndexError, NameError, ZeroDivisionError) AlwaysBuild(target, ...), env.AlwaysBuild(target, ...) target (out-of-date) . AlwaysBuild () -- . AlwaysBuild . env.Append(key=val, [...]) () env . key=val ( Python) . env.Append . Python Python <<>> - Append . SCons : $CPPDEFINES $LIBEMITTER $BUILDERS . . Append Prepend Unique . val . env key key val . val . . ( ) $CPPDEFINES / SCons - . $CPPDEFINES $LIBS *PATH SCons ( -D /D $CPPDEFINES) . ( gcc CPPDEFINES ): env = Environment(CXXFLAGS="-std=c11", CPPDEFINES="RELEASE") print(f"CXXFLAGS = {env['CXXFLAGS']}, CPPDEFINES = {env['CPPDEFINES']}") # notice including a leading space in CXXFLAGS addition env.Append(CXXFLAGS=" -O", CPPDEFINES="EXTRA") print(f"CXXFLAGS = {env['CXXFLAGS']}, CPPDEFINES = {env['CPPDEFINES']}") print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS')) $ scons -Q CXXFLAGS = -std=c11, CPPDEFINES = RELEASE CXXFLAGS = -std=c11 -O, CPPDEFINES = deque(['RELEASE', 'EXTRA']) CPPDEFINES will expand to -DRELEASE -DEXTRA scons: `.' is up to date. $CPPDEFINES C/C++ . ( -DFOO Microsoft C++ /DFOO) 1 (-DBAR=TEXT). SCons $CPPDEFINES : o . = . o . None . . o . . o - . None . : env = Environment(CPPDEFINES="FOO") print("CPPDEFINES =", env['CPPDEFINES']) env.Append(CPPDEFINES="BAR=1") print("CPPDEFINES =", env['CPPDEFINES']) env.Append(CPPDEFINES=[("OTHER", 2)]) print("CPPDEFINES =", env['CPPDEFINES']) env.Append(CPPDEFINES={"EXTRA": "arg"}) print("CPPDEFINES =", env['CPPDEFINES']) print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS')) $ scons -Q CPPDEFINES = FOO CPPDEFINES = deque(['FOO', 'BAR=1']) CPPDEFINES = deque(['FOO', 'BAR=1', ('OTHER', 2)]) CPPDEFINES = deque(['FOO', 'BAR=1', ('OTHER', 2), ('EXTRA', 'arg')]) CPPDEFINES will expand to -DFOO -DBAR=1 -DOTHER=2 -DEXTRA=arg scons: `.' is up to date. : env = Environment() env.Append(CPPDEFINES=[("ONE", 1), "TWO", ("THREE", )]) print("CPPDEFINES =", env['CPPDEFINES']) env.Append(CPPDEFINES={"FOUR": 4, "FIVE": None}) print("CPPDEFINES =", env['CPPDEFINES']) print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS')) $ scons -Q CPPDEFINES = [('ONE', 1), 'TWO', ('THREE',)] CPPDEFINES = deque([('ONE', 1), 'TWO', ('THREE',), ('FOUR', 4), ('FIVE', None)]) CPPDEFINES will expand to -DONE=1 -DTWO -DTHREE -DFOUR=4 -DFIVE scons: `.' is up to date. 4.5: . env = Environment() env.Append(CPPDEFINES=("MACRO1", "MACRO2")) print("CPPDEFINES =", env['CPPDEFINES']) env.Append(CPPDEFINES=[("MACRO3", "MACRO4")]) print("CPPDEFINES =", env['CPPDEFINES']) print("CPPDEFINES will expand to", env.subst('$_CPPDEFFLAGS')) $ scons -Q CPPDEFINES = ('MACRO1', 'MACRO2') CPPDEFINES = deque(['MACRO1', 'MACRO2', ('MACRO3', 'MACRO4')]) CPPDEFINES will expand to -DMACRO1 -DMACRO2 -DMACRO3=MACRO4 scons: `.' is up to date. $CPPDEFINES . val val None . - $CPPDEFINES . Python (exception) . env.Append ( PATH ) . $LIBS . env.Append(CPPPATH=["#/include"]) : env.AppendUnique env.Prepend env.PrependUnique. env.AppendENVPath(name, newpath, [envname, sep, delete_existing=False]) newpath name envname (env). envname "ENV" ( $ENV). envname env . newpath . (os.pathsep) sep . ( # ) . name . . newpath . delete_existing (true) () . ( ) . . : print('before:', env['ENV']['INCLUDE']) include_path = '/foo/bar:/foo' env.AppendENVPath('INCLUDE', include_path) print('after:', env['ENV']['INCLUDE']) : before: /foo:/biz after: /biz:/foo/bar:/foo : env.PrependENVPath. env.AppendUnique(key=val, [...], [delete_existing=False]) . env.Append . delete_existing (true) val val . : env.AppendUnique(CCFLAGS='-g', FOO=['foo.yyy']) : env.Append env.Prepend env.PrependUnique. Builder(action, [arguments]), env.Builder(action, [arguments]) Builder action . "Builder Objects" . env.Builder() action env env.Builder . Builder Builder . CacheDir(cache_dir, custom_class=None), env.CacheDir(cache_dir, custom_class=None) scons (cache) cache_dir . cache_dir . cache_dir None . env.CacheDir . CacheDir . SCons.CacheDir.CacheDir custom_class . None SCons . scons (build signature) ( ). . scons . scons (cache hits) Retrieved `file' from cache . --cache-show . --cache-disable . --cache-readonly . --cache-force . (--cache-disable --cache-readonly) . NoCache . SCons . (pruning) . Clean(targets, files), env.Clean(targets, files) files targets ( -c). targets files (node) . . . NoClean : NoClean files Clean . : Clean('foo', ['bar', 'baz']) Clean('dist', env.Program('hello', 'hello.c')) Clean(['foo', 'bar'], 'something_else_to_clean') SCons - . . Clean . Clean(docdir, os.path.join(docdir, projectname)) env.Clone([key=val, ...]) (construction environment) . (construction variables) . << >> (Construction Environments) . : env2 = env.Clone() env3 = env.Clone(CCFLAGS='-g') Environment tools toolpath : def MyTool(env): env['FOO'] = 'bar' env4 = env.Clone(tools=['msvc', MyTool]) parse_flags ( env.MergeFlags). # create an environment for compiling programs that use wxWidgets wx_env = env.Clone(parse_flags='!wx-config --cflags --cxxflags') variables () Variables . 4.8.0: variables . Command(target, source, action, [key=val, ...]), env.Command(target, source, action, [key=val, ...]) (builder) action target source . Builder . Command source_scanner target_scanner . Scanner . DirScanner Builder . Command source_factory target_factory SCons . Node . Entry . Builder . Builder . Builder << >> (Builder Objects) . << >> (Builder Methods) : . action ( ) Python << >> (Action Objects) . (@) (-) (exit status) . : env.Command( target='foo.out', source='foo.in', action="$FOO_BUILD < $SOURCES > $TARGET" ) env.Command( target='bar.out', source='bar.in', action=["rm -f $TARGET", "$BAR_BUILD < $SOURCES > $TARGET"], ENV={'PATH': '/usr/local/bin/'}, ) import os def rename(env, target, source): os.rename('.tmp', target[0]) env.Command( target='baz.out', source='baz.in', action=["$BAZ_BUILD < $SOURCES > .tmp", rename], ) Command / . Dir env.Dir . : env.Command('ddd.list', Dir('ddd'), 'ls -l $SOURCE > $TARGET') env['DISTDIR'] = 'destination/directory' env.Command(env.Dir('$DISTDIR')), None, make_distdir) SCons . Configure(env, [custom_tests, conf_dir, log_file, config_h]), env.Configure([custom_tests, conf_dir, log_file, config_h]) Configure GNU autoconf . <> . DebugOptions([json]) SCons . json JSON --debug=json . DebugOptions(json='#/build/output/scons_stats.json') 4.6.0. Decider(function), env.Decider(function) (up-to-date) function . function (decider) : "content" (out-of-date) (checksum) . content . 4.1: content . MD5 . "content-timestamp" (timestamp) . content ( ) . SCons . 4.1: content-timestamp . MD5-timestamp . "timestamp-newer" . Make make timestamp-newer . "timestamp-match" . Make ( ) ( ) . : # Use exact timestamp matches by default. Decider('timestamp-match') # Use hash content signatures for any targets built # with the attached construction environment. env.Decider('content') function Python . : dependency () <<>> target target . target () . dependency << >> . prev_ni dependency target . . repo_node dependency Node . ( repo_node=None ). Repository . function dependency target <<>> True ( ) False ( ). . . : def my_decider(dependency, target, prev_ni, repo_node=None): return not os.path.exists(str(target)) env.Decider(my_decider) Default(target[, ...]), env.Default(target[, ...]) SCons . Default SCons ( << >> (Target Selection) ). target NodeList Builder None . target Alias ( ). Default . None target Default ( ) . . Default DEFAULT_TARGETS ( ). : Default('foo', 'bar', 'baz') env.Default(['a', 'b', 'c']) hello = env.Program('hello', 'hello.c') env.Default(hello) DefaultEnvironment([key=value, ...]) (construction environment) . (Default Environment) SCons Builder . Environment . (singleton) DefaultEnvironment . . . DefaultEnvironment . SCons . . . SConscript Builder DefaultEnvironment (DefaultEnvironment(tools=[])) . scons . Depends(target, dependency), env.Depends(target, dependency) target dependency . target dependency ( ) Node Node ( Builder ). Scanner . : env.Depends('foo', 'other-input-file-for-foo') mylib = env.Library('mylib.c') installed_lib = env.Install('lib', mylib) bar = env.Program('bar.c') # Arrange for the library to be copied into the installation # directory before trying to build the "bar" program. # (Note that this is for example only. A "real" library # dependency would normally be configured through the $LIBS # and $LIBPATH variables, not using an env.Depends() call.) env.Depends(bar, installed_lib) env.Detect(progs) : progs . progs None . (env['ENV']['PATH']) . Windows (env['ENV']['PATHEXT']) . env.Detect env.WhereIs . env.Dictionary([var, ...], [as_dict=]) env . var dict . var as_dict (true) dict ( ) var . : cvars = env.Dictionary() cc_values = env.Dictionary('CC', 'CCFLAGS', 'CCCOM') env.Dictionary . env.Dictionary . env.Dictionary - . 4.9.0: as_dict . Dir(name, [directory]), env.Dir(name, [directory]) (Directory Node) . . name . directory . directory . name . name SCons . name . (Builder) . "Filesystem Nodes" . env.Dump([var, ...], [format=TYPE]) env . var ( ) . var . format : pretty (pretty-printed) - dict Python ( ). json JSON . JSON JSON dict Python . 4.9.0: key . dict ( ) . : SConstruct env = Environment() print(env.Dump('CCCOM')) print(env.Dump('CC', 'CCFLAGS', format='json')) : {'CCCOM': '$CC -o $TARGET -c $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES'} { "CC": "gcc", "CCFLAGS": [] } SConstruct: env = Environment() print(env.Dump()) : { 'AR': 'ar', 'ARCOM': '$AR $ARFLAGS $TARGET $SOURCES\n$RANLIB $RANLIBFLAGS $TARGET', 'ARFLAGS': ['r'], 'AS': 'as', 'ASCOM': '$AS $ASFLAGS -o $TARGET $SOURCES', 'ASFLAGS': [], ... EnsurePythonVersion(major, minor) Python major.minor . Python SCons . : EnsurePythonVersion(2,2) EnsureSConsVersion(major, minor, [revision]) SCons major.minor revision major.minor.revision . SCons SCons . : EnsureSConsVersion(0,14) EnsureSConsVersion(0,96,90) Environment([key=value, ...]), env.Environment([key=value, ...]) key=value . parse_flags platform toolpath tools variables . <> . Execute(action, [actionargs ...]), env.Execute(action, [actionargs ...]) Action . action Action Python Action . Execute Action Action ( Action Objects ). : Execute(Copy('file.out', 'file.in')) Execute SConscript . Execute SCons . file.out file.in . Execute Python . action ( ) scons . Execute : if Execute("mkdir sub/dir/ectory"): # The mkdir failed, don't try to build. Exit(1) Exit([value]) scons value . 0 () . Export([vars...], [key=value...]), env.Export([vars...], [key=value...]) SConscript . SConscript (import) . vars . . SConscript (scope) . vars Python . / . . Export . . . SConscript Import . (mutable) . : env = Environment() # Make env available for all SConscript files to Import(). Export("env") package = 'my_name' # Make env and package available for all SConscript files:. Export("env", "package") # Make env and package available for all SConscript files: Export(["env", "package"]) # Make env available using the name debug: Export(debug=env) # Make env available using the name debug: Export({"debug": env}) SConscript exports () SConscript . . File(name, [directory]), env.File(name, [directory]) () (File Node) . File Node . name . directory . directory . name . name SCons . (Construction variables) name . File Node Builder . File Node "Filesystem Nodes" . FindFile(file, dirs), env.FindFile(file, dirs) file dirs. dirs . . : # Searches for 'foo' in 'dir1' and 'dir2', returning the node if found foo = env.FindFile('foo', ['dir1', 'dir2']) FindInstalledFiles(), env.FindInstalledFiles() (Builder) Install InstallAs . . Install InstallAs - Builder . : Install('/bin', ['executable_a', 'executable_b']) # Returns the file node list # ['/bin/executable_a', '/bin/executable_b'] FindInstalledFiles() Install('/lib', ['some_library']) # Returns the file node list # ['/bin/executable_a', '/bin/executable_b', '/lib/some_library'] FindInstalledFiles() FindPathDirs(variable) path_function Scanner . variable (construction environment) ( $CPPPATH $LIBPATH). FindPathDirs path_function SCons : () (variant directory) Repository -Y/--repository . () variable . : def my_scan(node, env, path, arg): # Code to scan file contents goes here... return include_files scanner = Scanner( name='myscanner', function=my_scan, path_function=FindPathDirs('MYPATH') ) FindSourceFiles([node]), env.FindSourceFiles([node]) . node ( (".") ) . ( ) . . : Program('src/main_a.c') Program('src/main_b.c') Program('main_c.c') # returns ['main_c.c', 'src/main_a.c', 'SConstruct', 'src/main_b.c'] FindSourceFiles() # returns ['src/main_b.c', 'src/main_a.c' ] FindSourceFiles('src') ( SConstruct ) . Flatten(sequence), env.Flatten(sequence) ( list tuple Python) (flattened) . (Builders) Builder Python . : foo = Object('foo.c') bar = Object('bar.c') # `foo' `bar' ()Object # `objects' : objects = ['f1.o', foo, 'f2.o', bar, 'f3.o'] # # : Program(source = objects) # Python # ()Flatten : for object in Flatten(objects): print(str(object)) GetBuildFailures() (exceptions) . BuildError : .node . .status Python Node . .errstr SCons . ( "Error 2" .) .filename . .node . sub/dir/target sub/dir .node sub/dir/target .filename sub/dir . .executor Executor SCons Node . . .action Action SCons . . .command $TARGET $SOURCE . GetBuildFailures GetBuildFailures SConscript . atexit.register Python SCons . : import atexit def print_build_failures(): from SCons.Script import GetBuildFailures for bf in GetBuildFailures(): print("%s failed: %s" % (bf.node, bf.errstr)) atexit.register(print_build_failures) GetBuildPath(file, [...]), env.GetBuildPath(file, [...]) ( ) scons file ( ) . file Node scons . GetLaunchDir() scons . -u -U -D SConstruct . GetOption(name), env.GetOption(name) name SetOption . . . name AddOption GetOption SConscript . +------------------------+---------------------------+--------------------------------+ | | | | | | | | +------------------------+---------------------------+--------------------------------+ |cache_debug | --cache-debug | ( | | | | ) | +------------------------+---------------------------+--------------------------------+ |cache_disable | --cache-disable, | | | | --no-cache | | +------------------------+---------------------------+--------------------------------+ |cache_force | --cache-force, | | | | --cache-populate | | +------------------------+---------------------------+--------------------------------+ |cache_readonly | --cache-readonly | | +------------------------+---------------------------+--------------------------------+ |cache_show | --cache-show | | +------------------------+---------------------------+--------------------------------+ |clean | -c, --clean, | | | | --remove | | +------------------------+---------------------------+--------------------------------+ |climb_up | -D, -U, | . 1 | | | -u, --up, | -u | | | --search_up | 2 | | | | -D 3 | | | | -U . | +------------------------+---------------------------+--------------------------------+ |config | --config | | +------------------------+---------------------------+--------------------------------+ |debug | --debug | | +------------------------+---------------------------+--------------------------------+ |directory | -C, --directory | | | | | () | +------------------------+---------------------------+--------------------------------+ |diskcheck | --diskcheck | | +------------------------+---------------------------+--------------------------------+ |duplicate | --duplicate | | +------------------------+---------------------------+--------------------------------+ |enable_virtualenv | --enable-virtualenv | | +------------------------+---------------------------+--------------------------------+ |experimental | --experimental | . | | | | 4.2. | +------------------------+---------------------------+--------------------------------+ |file | -f, --file, | ( | | | --makefile, | ) | | | --sconstruct | | +------------------------+---------------------------+--------------------------------+ |hash_chunksize | --hash-chunksize | . | | | | | | | | md5_chunksize | | | | . | | | | 4.2 | +------------------------+---------------------------+--------------------------------+ |hash_format | --hash-format | . | | | | 4.2 | +------------------------+---------------------------+--------------------------------+ |help | -h, --help | | +------------------------+---------------------------+--------------------------------+ |ignore_errors | -i, --ignore-errors | | +------------------------+---------------------------+--------------------------------+ |ignore_virtualenv | --ignore-virtualenv | | +------------------------+---------------------------+--------------------------------+ |implicit_cache | --implicit-cache | | +------------------------+---------------------------+--------------------------------+ |implicit_deps_changed | --implicit-deps-changed | | +------------------------+---------------------------+--------------------------------+ |implicit_deps_unchanged | --implicit-deps-unchanged | | +------------------------+---------------------------+--------------------------------+ |include_dir | -I, --include-dir | | | | | () | +------------------------+---------------------------+--------------------------------+ |install_sandbox | --install-sandbox | ( | | | | ). | | | | | | | | | | | | install | | | | | | | | | +------------------------+---------------------------+--------------------------------+ |keep_going | -k, --keep-going | | +------------------------+---------------------------+--------------------------------+ |max_drift | --max-drift | | +------------------------+---------------------------+--------------------------------+ |md5_chunksize | --hash-chunksize | . | | | | hash_chunksize | | | | | | | | . | | | | 4.2 | | | | | | | | | +------------------------+---------------------------+--------------------------------+ |no_exec | -n, --no-exec, | | | | --just-print, | | | | --dry-run, --recon | | +------------------------+---------------------------+--------------------------------+ |no_progress | -Q | | +------------------------+---------------------------+--------------------------------+ |num_jobs | -j, --jobs | | +------------------------+---------------------------+--------------------------------+ |package_type | --package-type | . | | | | | | | | | | | | | | | | packaging | | | | | | | | | +------------------------+---------------------------+--------------------------------+ |profile_file | --profile | ( | | | | ) | +------------------------+---------------------------+--------------------------------+ |question | -q, --question | | +------------------------+---------------------------+--------------------------------+ |random | --random | | +------------------------+---------------------------+--------------------------------+ |repository | -Y, --repository, | | | | --srcdir | () | +------------------------+---------------------------+--------------------------------+ |silent | -s, --silent, | | | | --quiet | | +------------------------+---------------------------+--------------------------------+ |site_dir | --site-dir, | () | | | --no-site-dir | False None | +------------------------+---------------------------+--------------------------------+ |stack_size | --stack-size | | +------------------------+---------------------------+--------------------------------+ |taskmastertrace_file | --taskmastertrace | ( | | | | ) | +------------------------+---------------------------+--------------------------------+ |tree_printers | --tree | | +------------------------+---------------------------+--------------------------------+ |warn | --warn, --warning | | +------------------------+---------------------------+--------------------------------+ GetSConsVersion() SCons Tuple[int, int, int] major minor revision . 4.8.0 . Glob(pattern, [ondisk=True, source=False, strings=False, exclude=None]), env.Glob(pattern, [ondisk=True, source=False, strings=False, exclude=None]) ( ) Node ( ) pattern . pattern (top-relative) () SConscript . Glob Node SCons . (env.Glob) pattern . glob.glob Python . pattern POSIX : +-------------+----------------------------+ | | | +-------------+----------------------------+ |* | | | | | | | | | | | +-------------+----------------------------+ |? | | | | | | | | | | | | | | +-------------+----------------------------+ |[seq] | | | | | | | seq | | | | | | | | | ( | | | | | | | | | ). | +-------------+----------------------------+ |[!seq] | | | | | | | seq | | | | | | | +-------------+----------------------------+ . '[?]' '?' . - ( ) . . Glob ( Repository ) ( VariantDir ) Node Node ( ) (SConscript) . ondisk (false) Node File Dir . Node . source (true) (variant directory) Glob Node . strings (true) Glob Node . (SConscript) . ( SCons Node SConscript Node SConscript SConscript .) exclude . . pattern . : Program("foo", Glob("*.c")) Zip("/tmp/everything", Glob(".??*") + Glob("*")) sources = Glob("*.cpp", exclude=["os_*_specific_*.cpp"]) \ + Glob("os_%s_specific_*.cpp" % currentOS) Help(text, append=False, local_only=False), env.Help(text, append=False, local_only=False) text scons -h --help . Help append False () . scons AddOption . Help . append True text . local_only True ( False ) AddOption scons . Help append local_only . 4.6.0 : local_only . Ignore(target, dependency), env.Ignore(target, dependency) target dependency . target dependency Node Node . Ignore target dependency. : SCons . . : env.Ignore('foo', 'foo.c') env.Ignore('bar', ['bar1.h', 'bar2.h']) env.Ignore('.', 'foobar.obj') env.Ignore('bar', 'bar/foobar.obj') Import(vars...), env.Import(vars...) SConscript . vars Export exports SConscript . SConscript . Import . "*" . . SConscript . : Import("env") Import("env", "variable") Import(["env", "variable"]) Import("*") Literal(string), env.Literal(string) string . Local(targets), env.Local(targets) targets . Node Node . env.MergeFlags(arg, [unique]) arg env . arg - . arg MergeFlags . env.ParseFlags : ParseFlags GCC . arg . unique true () . PATH . . unique false . : # Add an optimization flag to $CCFLAGS. env.MergeFlags({'CCFLAGS': '-O3'}) # Combine the flags returned from running pkg-config with an optimization # flag and merge the result into the construction variables. env.MergeFlags(['!pkg-config gtk+-2.0 --cflags', '-O3']) # Combine an optimization flag with the flags returned from running pkg-config # for two distinct packages and merge into the construction variables. env.MergeFlags( [ '-O3', '!pkg-config gtk+-2.0 --cflags --libs', '!pkg-config libpng12 --cflags --libs', ] ) NoCache(target, ...), env.NoCache(target, ...) CacheDir . . NoCache . NoCache (Builder) . NoCache . : NoCache('foo.elf') NoCache(env.Program('hello', 'hello.c')) NoClean(targets, ...), env.NoClean(targets, ...) target ( ) ( -c) . targets / . NoClean . NoClean Clean . : NoClean('foo.elf') NoClean(env.Program('hello', 'hello.c')) env.ParseConfig(command, [function, unique]) command function . command . function None env.MergeFlags . unique=False . command SCons ( $ENV ) . command . pkg-config PKG_CONFIG_PATH . env.MergeFlags command . env.MergeFlags - env.ParseFlags . command function : command unique. ParseDepends(filename, [must_exist, only_one]), env.ParseDepends(filename, [must_exist, only_one]) filename Make mkdep . filename . must_exist True SCons . only_one True SCons . gcc -M .d . filename SConscript ParseDepends . env.ParseFlags(flags, ...) GCC SCons . env.MergeFlags . ( env.MergeFlags env.ParseFlags .) (!) GCC . *-config POSIX ( pkg-config) . SCons . ParseConfig . : -arch CCFLAGS, LINKFLAGS -D CPPDEFINES -framework FRAMEWORKS -frameworkdir= FRAMEWORKPATH -fmerge-all-constants CCFLAGS, LINKFLAGS -fopenmp CCFLAGS, LINKFLAGS -fsanitize CCFLAGS, LINKFLAGS -include CCFLAGS -imacros CCFLAGS -isysroot CCFLAGS, LINKFLAGS -isystem CCFLAGS -iquote CCFLAGS -idirafter CCFLAGS -I CPPPATH -l LIBS -L LIBPATH -mno-cygwin CCFLAGS, LINKFLAGS -mwindows LINKFLAGS -openmp CCFLAGS, LINKFLAGS -pthread CCFLAGS, LINKFLAGS -std= CFLAGS -stdlib= CXXFLAGS -Wa, ASFLAGS, CCFLAGS -Wl,-rpath= RPATH -Wl,-R, RPATH -Wl,-R RPATH -Wl, LINKFLAGS -Wp, CPPFLAGS - CCFLAGS + CCFLAGS, LINKFLAGS $LIBS . ( ): dict = env.ParseFlags('-O2 -Dfoo -Dbar=1') dict = env.ParseFlags('-O2', '-Dfoo', '-Dbar=1') dict = env.ParseFlags(['-O2', '-Dfoo -Dbar=1']) dict = env.ParseFlags('-O2', '!echo -Dfoo -Dbar=1') Platform(plat), env.Platform(plat) plat ( ) platform Environment . : env = Environment(platform=Platform('win32')) plat . env.Platform('posix') "Construction Environments" . Precious(target, ...), env.Precious(target, ...) target (precious) . SCons . / (nodes) . . env.Prepend(key=val, [...]) env.Append ( ) . : env.Prepend(CCFLAGS='-g ', FOO=['foo.yyy']) : env.Append env.AppendUnique env.PrependUnique. env.PrependENVPath(name, newpath, [envname, sep, delete_existing=True]) newpath name envname (env) . envname "ENV" ( $ENV). envname env dict . newpath . (os.pathsep) sep . ( # ) . name . . newpath . delete_existing () . ( ) . . : print('before:', env['ENV']['INCLUDE']) include_path = '/foo/bar:/foo' env.PrependENVPath('INCLUDE', include_path) print('after:', env['ENV']['INCLUDE']) : before: /biz:/foo after: /foo/bar:/foo:/biz env.AppendENVPath. env.PrependUnique(key=val, [...], [delete_existing=False]) . env.Append . delete_existing val val . : env.PrependUnique(CCFLAGS='-g', FOO=['foo.yyy']) env.Append env.AppendUnique env.Prepend. Progress(callable, [interval]), Progress(string, [interval, file, overwrite]), Progress(list_of_strings, [interval, file, overwrite]) SCons (Nodes ) . (callable) Python ( __call__ ) interval ( 1 ). . ( *args **kwargs . SCons .) : def my_progress_function(node, *args, **kwargs): print('Evaluating node %s!' % node) Progress(my_progress_function, interval=10) . \r ( ) : import sys class ProgressCounter(object): count = 0 def __call__(self, node, *args, **kw): self.count += 100 sys.stderr.write('Evaluated %s nodes\r' % self.count) Progress(ProgressCounter(), interval=100) Progress interval . interval . . file . : import sys Progress('.', interval=100, file=sys.stderr) $TARGET; . not SCons . (\r) overwrite ( False) : import sys Progress('$TARGET\r', overwrite=True) (spinner) : Progress(['-\r', '\\\r', '|\r', '/\r'], interval=5) Pseudo(target, ...), env.Pseudo(target, ...) target (pseudo target) . target SCons . / (Node) . . Pseudo ( Command) . .PHONY GNU make . SCons ( Alias ) . PyPackageDir(modulename), env.PyPackageDir(modulename) modulename Python . modulename . ( Dir ) modulename . None . (Tool) Python toolpath Tool Environment Clone (site_scons/site_tools) . PyPackageDir (hardcode) . : env = Environment( tools=["default", "ExampleTool"], toolpath=[PyPackageDir("example_tool")] ) env.Replace(key=val, [...]) Environment . : env.Replace(CCFLAGS='-g', FOO='foo.xxx') Repository(directory), env.Repository(directory) directory . Repository . . scons (worktree) . (derived files) . . SCons (sconsign) . scons . Local . Requires(target, prerequisite), env.Requires(target, prerequisite) (order-only) target prerequisite . () () () () . target prerequisite Node Node . target () . . : env.Requires('foo', 'file-that-must-be-built-before-foo') Return([vars..., stop=True]) SConscript vars . Return . (whitespace) . (tuple) . vars . Return SConscript . stop (False) SConscript Return ( SCons 0.98 ). vars Return . : # ( / False) Return() # 'foo' . Return("foo") # 'foo' 'bar' . Return("foo", "bar") # 'val1' 'val2' . Return('val1 val2') Scanner(function, [name, argument, skeys, path_function, node_class, node_factory, scan_check, recursive]), env.Scanner(function, [name, argument, skeys, path_function, node_class, node_factory, scan_check, recursive]) Scanner function . <> . SConscript(scriptnames, [exports, variant_dir, duplicate, must_exist]), env.SConscript(scriptnames, [exports, variant_dir, duplicate, must_exist]), SConscript(dirs=subdirs, [name=scriptname, exports, variant_dir, duplicate, must_exist]), env.SConscript(dirs=subdirs, [name=scriptname, exports, variant_dir, duplicate, must_exist]) () SConscript ( ) . SConscript . SConscript . exports ( ). : SConscript('SConscript') # run SConscript in the current directory SConscript('src/SConscript') # run SConscript in the src directory SConscript(['src/SConscript', 'doc/SConscript']) SConscript(Split('src/SConscript doc/SConscript')) config = SConscript('MyConfig.py') dirs . . scons SConscript ( ) . name=scriptname SConscript . : SConscript(dirs='.') # run SConscript in the current directory SConscript(dirs='src') # run SConscript in the src directory SConscript(dirs=['src', 'doc']) SConscript(dirs=['sub1', 'sub2'], name='MySConscript') exports SConscript SConscript . . (scriptnames) exports () . () SConscript (export) Export . SConscript Import . : foo = SConscript('sub/SConscript', exports='env') SConscript('dir/SConscript', exports=['env', 'variable']) SConscript(dirs='subdir', exports='env variable') SConscript(dirs=['one', 'two', 'three'], exports='shared_info') variant_dir VariantDir SConscript . variant_dir SConscript . SConscript SConscript variant_dir . : SConscript('src/SConscript', variant_dir='build') : VariantDir('build', 'src') SConscript('build/SConscript') SConstruct SConscript('SConscript', variant_dir='build') : VariantDir('build', '.') SConscript('build/SConscript') duplicate VariantDir . variant_dir duplicate . VariantDir . must_exist True () SConscript . ( 3.1 SCons) must_exist=False SConscript . 4.6.0: must_exist True . : # collect the configuration information and use it to build src and doc shared_info = SConscript('MyConfig.py') SConscript('src/SConscript', exports='shared_info') SConscript('doc/SConscript', exports='shared_info') # build debugging and production versions. SConscript # can use Dir('.').path to determine variant. SConscript('SConscript', variant_dir='debug', duplicate=0) SConscript('SConscript', variant_dir='prod', duplicate=0) # build debugging and production versions. SConscript # is passed flags to use. opts = { 'CPPDEFINES' : ['DEBUG'], 'CCFLAGS' : '-pgdb' } SConscript('SConscript', variant_dir='debug', duplicate=0, exports=opts) opts = { 'CPPDEFINES' : ['NODEBUG'], 'CCFLAGS' : '-O' } SConscript('SConscript', variant_dir='prod', duplicate=0, exports=opts) # build common documentation and compile for different architectures SConscript('doc/SConscript', variant_dir='build/doc', duplicate=0) SConscript('src/SConscript', variant_dir='build/x86', duplicate=0) SConscript('src/SConscript', variant_dir='build/ppc', duplicate=0) SConscript () SConscript Return . SConscript (tuple) . Return None . SConscriptChdir(value) scons SConscript . (false) scons SConscript (top-level) . ( SConscript .) SConscriptChdir . : SConscriptChdir(False) SConscript('foo/SConscript') # foo SConscriptChdir(True) SConscript('bar/SConscript') # bar SConsignFile([name, dbm_module]), env.SConsignFile([name, dbm_module]) SCons . . name () . SConstruct name . .sconsign . () dbm_module ( --hash-format). dbm_module Python / . (import) . SCons.dblite serialize Python ( pickle) Python . dbm Python . .sconsign.dblite SConsignFile . name . / . name None scons .sconsign . SCons 0.97 ( ) . . 4.11.0 : . : # ".sconsign.dblite" # SConstruct ( ). SConsignFile() # "etc/scons-signatures" # SConstruct . # SCons . SConsignFile("etc/scons-signatures") # . # SCons . SConsignFile("/home/me/SCons/signatures") # .sconsign # . SConsignFile(None) # .sconsign GNU dbm import dbm.gnu SConsignFile(dbm_module=dbm.gnu) env.SetDefault(key=val, [...]) (construction variables) ( ) . : env.SetDefault(FOO='foo') if 'FOO' not in env: env['FOO'] = 'foo' SetOption(name, value), env.SetOption(name, value) name value . ( ) - SetOption . SConscript SetOption site_init.py . GetOption . (manpage) . value ( ) value ( True 1) ( False 0) . SConscript SetOption SetOption . ( ) AddOption SetOption AddOption settable=True . : +------------------------+---------------------------+--------------------------------+ | | | | | | | | +------------------------+---------------------------+--------------------------------+ |clean | -c, --clean, | | | | --remove | | +------------------------+---------------------------+--------------------------------+ |diskcheck | --diskcheck | | +------------------------+---------------------------+--------------------------------+ |duplicate | --duplicate | | +------------------------+---------------------------+--------------------------------+ |experimental | --experimental | . | | | | 4.2. | +------------------------+---------------------------+--------------------------------+ |hash_chunksize | --hash-chunksize | . | | | | | | | | md5_chunksize | | | | . 4.2 | +------------------------+---------------------------+--------------------------------+ |hash_format | --hash-format | . 4.2 | +------------------------+---------------------------+--------------------------------+ |help | -h, --help | | +------------------------+---------------------------+--------------------------------+ |implicit_cache | --implicit-cache | | +------------------------+---------------------------+--------------------------------+ |implicit_deps_changed | --implicit-deps-changed | . | | | | | | | | implicit_cache | | | | | | | | . | | | | 4.2 | | | | | +------------------------+---------------------------+--------------------------------+ |implicit_deps_unchanged | --implicit-deps-unchanged | . | | | | | | | | implicit_cache | | | | | | | | . | | | | 4.2 | | | | | +------------------------+---------------------------+--------------------------------+ |max_drift | --max-drift | | +------------------------+---------------------------+--------------------------------+ |md5_chunksize | --hash-chunksize | . | | | | hash_chunksize | | | | | | | | . | | | | 4.2 | | | | | +------------------------+---------------------------+--------------------------------+ |no_exec | -n, --no-exec, | | | | --just-print, | | | | --dry-run, --recon | | +------------------------+---------------------------+--------------------------------+ |no_progress | -Q | . | | | | [6] | +------------------------+---------------------------+--------------------------------+ |num_jobs | -j, --jobs | | +------------------------+---------------------------+--------------------------------+ |random | --random | | +------------------------+---------------------------+--------------------------------+ |silent | -s, --silent, | | | | --quiet | | +------------------------+---------------------------+--------------------------------+ |stack_size | --stack-size | | +------------------------+---------------------------+--------------------------------+ |warn | --warn | | +------------------------+---------------------------+--------------------------------+ |---- [a] no_progress SetOption | | SConscript ( | | site_init.py) | | | | SConscript | | SCons | | | | SetOption . | +-------------------------------------------------------------------------------------+ : SetOption('max_drift', 0) SideEffect(side_effect, target), env.SideEffect(side_effect, target) side_effect target . side_effect target (Node) . . PDB .obj TeX . scons . . target -c side_effect . ( side_effect .) target side_effect Clean env.Clean . Node . . Split(arg), env.Split(arg) arg . ( ) . arg (tuple) . arg . Split . : files = Split("f1.c f2.c f3.c") files = env.Split("f4.c f5.c f6.c") files = Split(""" f7.c f8.c f9.c """) env.subst(input, [raw, target, source, conv]) () input . ${expression} . $ $$ . . $( $) . raw $(-$) 1 . $( $) ( ) raw 2 . input ( ) . $TARGET $TARGETS $SOURCE $SOURCES target source . env.subst Python (action) SCons . . conv . Python ( SCons) Python lambda Python . : print(env.subst("The C compiler is: $CC")) def compile(target, source, env): sourceDir = env.subst( "${SOURCE.srcdir}", target=target, source=source ) source_nodes = env.subst('$EXPAND_TO_NODELIST', conv=lambda x: x) Tag(node, tags) (Node) Package . Node . : # 644 Tag(Library('lib.c'), UNIX_ATTR="0o644") # file2.txt Tag('file2.txt', DOC) Tool(name, [toolpath, key=value, ...]), env.Tool(name, [toolpath, key=value, ...]) name . (env.Tool) env name $TOOLS . Tool . ( Tools ) toolpath . toolpath toolpath ( ) . generate . generate . 4.2: env.Tool ( None ). : env.Tool('gcc') env.Tool('opengl', toolpath=['build/tools']) tools Environment Clone . $TOOLS . : env = Environment(tools=[Tool('msvc')]) env = Environment() msvctool = Tool('msvc') msvctool(env) # 'msvc' TOOLS gltool = Tool('opengl', toolpath = ['tools']) gltool(env) # 'opengl' TOOLS ValidateOptions([throw_exception=False]) SCons AddOption . SCons << >> (fail fast). AddOption SConscript . AddOption ValidateOptions . ValidateOptions . throw_exception True ( False ) SConsBadOptionError (raise) SConscript . (import) ( ). ( ) - . . : $ scons --complier=mingw # --compiler SCons (configure) --compiler <<>> . : from SCons.Script.SConsOptions import SConsBadOptionError AddOption( '--compiler', dest='compiler', action='store', default='gcc', type='string', ) # ... SConscript ... try: ValidateOptions(throw_exception=True) except SConsBadOptionError as e: print(f"ValidateOptions detects a fail: ", e.opt_str) Exit(3) 4.5.0 Value(value, [built_value], [name]), env.Value(value, [built_value], [name]) Node value Python . Value . Value SCons . Value . built_value Value Node <<>> . name Value value . Value write <<>> Value . read Node . 4.0: name . : env = Environment() def create(target, source, env): """Action function to create a file from a Value. Writes 'prefix=$SOURCE' into the file name given as $TARGET. """ with open(target[0], 'wb') as f: f.write(b'prefix=' + source[0].get_contents() + b'\n') # Fetch the prefix= argument, if any, from the command line. # Use /usr/local as the default. prefix = ARGUMENTS.get('prefix', '/usr/local') # Attach builder named Config to the construction environment # using the 'create' action function above. env['BUILDERS']['Config'] = Builder(action=create) env.Config(target='package-config', source=Value(prefix)) def build_value(target, source, env): """Action function to "build" a Value. Writes contents of $SOURCE into $TARGET, thus updating if it existed. """ target[0].write(source[0].get_contents()) output = env.Value('before') input = env.Value('after') # Attach a builder named UpdateValue to the construction environment # using the 'build_value' action function above. env['BUILDERS']['UpdateValue'] = Builder(action=build_value) env.UpdateValue(target=Value(output), source=Value(input)) VariantDir(variant_dir, src_dir, [duplicate]), env.VariantDir(variant_dir, src_dir, [duplicate]) variant_dir . src_dir variant_dir . VariantDir env.VariantDir . VariantDir src_dir . variant_dir . variant_dir SCons src_dir . SCons SConscript . . SCons variant_dir . (linking) . --duplicate SetOption . duplicate False SCons . src_dir variant_dir . duplicate=True () . . SCons . (clean) . SCons . SConscript SConscript . : # use names in the build directory, not the source directory VariantDir('build', 'src', duplicate=False) Program('build/prog', 'build/source.c') # this builds both the source and docs in a separate subtree VariantDir('build', '.', duplicate=False) SConscript(dirs=['build/src', 'build/doc']) # same as previous example, but only uses SConscript SConscript(dirs='src', variant_dir='build/src', duplicate=False) SConscript(dirs='doc', variant_dir='build/doc', duplicate=False) VariantDir SConscript . SConscript variant_dir duplicate . exports SConscript . SConscript Import . env1 = Environment(...settings for variant1...) env2 = Environment(...settings for variant2...) # run src/SConscript by using the variant dir paths VariantDir('build/variant1', 'src') SConscript('build/variant1/SConscript', exports={"env": env1}) VariantDir('build/variant2', 'src') SConscript('build/variant2/SConscript', exports={"env": env2}) Virtualenv() SCons Python . . WhereIs(program, [path, pathext, reject]), env.WhereIs(program, [path, pathext, reject]) program None . (construction environment) path None () (env['ENV']['PATH']) . env['ENV']['PATH'] (os.environ['PATH']) . Windows pathext None () (env['ENV']['PATHEXT']). env['ENV']['PATHEXT'] (os.environ['PATHEXT']) . path pathext None os.environ['PATH'] os.environ['PATHEXT'] . reject . SConscript (SConscript Variables) scons SConscript . ARGLIST variable=value . (tuple) . variable value [0] [1] (tuple unpacking) . : print("first variable, value =", ARGLIST[0][0], ARGLIST[0][1]) print("second variable, value =", ARGLIST[1][0], ARGLIST[1][1]) var, value = ARGLIST[2] print("third variable, value =", var, value) for var, value in ARGLIST: # process variable and value ARGLIST ( ARGUMENTS) SCons . << >> . ARGUMENTS (dictionary) variable=value . () ARGUMENTS . : if ARGUMENTS.get("debug", ""): env = Environment(CCFLAGS="-g") else: env = Environment() : ARGLIST. BUILD_TARGETS scons . Default. scons ( ) . Default . (Node) str Python Node . Default Default . DEFAULT_TARGETS . : if 'foo' in BUILD_TARGETS: print("Don't forget to test the `foo' program!") if 'special/program' in BUILD_TARGETS: SConscript('special') COMMAND_LINE_TARGETS . BUILD_TARGETS . . . () . : if 'foo' in COMMAND_LINE_TARGETS: print("Don't forget to test the `foo' program!") if 'special/program' in COMMAND_LINE_TARGETS: SConscript('special') DEFAULT_TARGETS (nodes) Default . BUILD_TARGETS . Node str Python . : print(str(DEFAULT_TARGETS[0])) if 'foo' in [str(t) for t in DEFAULT_TARGETS]: print("Don't forget to test the `foo' program!") DEFAULT_TARGETS Default : print([str(t) for t in DEFAULT_TARGETS]) # originally [] Default('foo') print([str(t) for t in DEFAULT_TARGETS]) # now a node ['foo'] Default('bar') print([str(t) for t in DEFAULT_TARGETS]) # now a node ['foo', 'bar'] Default(None) print([str(t) for t in DEFAULT_TARGETS]) # back to [] DEFAULT_TARGETS Default() SConscript . Python SConscript (import) Python : from SCons.Script import * (Construction Variables) << >> (Construction Variables) - << >> (construction environment) . Python : (_) . . . $CPPDEFINES C/C++ . SCons $CXX C++ ( ) . . $BUILDERS Builder ( Textfile) Builder Builder . : C/C++ << >> (action string) $CXXCOM $VARIABLE . ( Variable Substitution ). Python : env["CC"] = "cc" flags = env.get("CPPDEFINES", []) Dictionary : cvars = env.Dictionary() cvars["CC"] = "cc" cvars $CC . : env = Environment(CC="cc") Clone: env2 = env.Clone(CC="cl.exe") Builder Builder . (override) : env.Program('hello', 'hello.c', LIBS=['gl', 'glut']) SCons Builder Scanner . SCons . . . ( ) . get Python . env.Dump . __LDMODULEVERSIONFLAGS $LDMODULEVERSION $_LDMODULEVERSIONFLAGS . . __SHLIBVERSIONFLAGS $_SHLIBVERSIONFLAGS $SHLIBVERSION . . APPLELINK_COMPATIBILITY_VERSION Mac OS X : -compatibility_version X[.Y[.Z]] X 1 65535 Y 1 255 Z 1 255 . $SHLIBVERSION . 0 . $APPLELINK_NO_COMPATIBILITY_VERSION -compatibility_version . ld MacOS . _APPLELINK_COMPATIBILITY_VERSION ( ) -compatibility_version apple . $APPLELINK_COMPATIBILITY_VERSION $APPLELINK_NO_COMPATIBILITY_VERSION $SHLIBVERSION . APPLELINK_CURRENT_VERSION Mac OS X : -current_version X[.Y[.Z]] X 1 65535 Y 1 255 Z 1 255 . $SHLIBVERSION . $APPLELINK_NO_CURRENT_VERSION -current_version . ld MacOS . _APPLELINK_CURRENT_VERSION ( ) -current_version apple . $APPLELINK_CURRENT_VERSION $APPLELINK_NO_CURRENT_VERSION $SHLIBVERSION . APPLELINK_NO_COMPATIBILITY_VERSION True ( 1|True|non-empty string) -compatibility_version . $APPLELINK_COMPATIBILITY_VERSION . APPLELINK_NO_CURRENT_VERSION True ( 1|True|non-empty string) -current_version . $APPLELINK_CURRENT_VERSION . AR . ARCHITECTURE . SCons . Architecture: control Ipkg BuildArch: .spec RPM RPM . Package . ARCOM . ARCOMSTR . $ARCOM ( ) . env = Environment(ARCOMSTR = "Archiving $TARGET") ARFLAGS . AS . ASCOM . ASCOMSTR . $ASCOM ( ) . env = Environment(ASCOMSTR = "Assembling $TARGET") ASFLAGS . ASPPCOM C . $ASFLAGS $CPPFLAGS . ASPPCOMSTR C . $ASPPCOM ( ) . env = Environment(ASPPCOMSTR = "Assembling $TARGET") ASPPFLAGS C. $ASFLAGS . BIBTEX TeX LaTeX. BIBTEXCOM TeX LaTeX. BIBTEXCOMSTR TeX LaTeX . $BIBTEXCOM ( ) . env = Environment(BIBTEXCOMSTR = "Generating bibliography $TARGET") BIBTEXFLAGS TeX LaTeX. BUILDERS (builders) Builder . . Program Library . $BUILDERS . $BUILDERS : bld = Builder(action='foobuild < $SOURCE > $TARGET') env = Environment(BUILDERS={'NewBuilder': bld}) Builder Builder : env = Environment() env.Append(BUILDERS={'NewBuilder': bld}) : env = Environment() env['BUILDERS']['NewBuilder'] = bld CACHEDIR_CLASS SCons CacheDir . SCons.CacheDir.CacheDir . CC C. CCCOM C () . $CFLAGS $CCFLAGS $CPPFLAGS . (shared objects) $SHCCCOM . CCCOMSTR C () . $CCCOM ( ) . $SHCCCOMSTR . env = Environment(CCCOMSTR = "Compiling static object $TARGET") CCDEPFLAGS C C++ . . ( gcc clang msvc) CCFLAGS C C++ . $SHCCFLAGS . CCPCHFLAGS . $PCH Microsoft Visual C++ . CCPDBFLAGS PDB Microsoft Visual C++ . $PDB Microsoft Visual C++ . Microsoft Visual C++ SCons PDB /Z7 . (-j) PDB . . /Zi . $CCPDBFLAGS PDB /Zi : env['CCPDBFLAGS'] = ['${(PDB and "/Zi /Fd%s" % File(PDB)) or ""}'] /Zi .pdb $CCPDBFLAGS : env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb' CCVERSION C. C . CFILESUFFIX C. CFile C Lex (.l) YACC (.y) . .c ( ) . ( Windows) SCons .C ( ) C . CFLAGS C ( C C++). $SHCFLAGS . CHANGE_SPECFILE ( .spec RPM control Ipkg .wxs MSI). SCons . Package . CHANGED_SOURCES . ( "Variable Substitution" ). CHANGED_TARGETS . ( "Variable Substitution" ). CHANGELOG . %changelog .spec RPM . Package . COMPILATIONDB_COMSTR CompilationDatabase . COMPILATIONDB_PATH_FILTER CompilationDatabase output fnmatch ( glob ) . '' . COMPILATIONDB_USE_ABSPATH (boolean) CompilationDatabase file output . False ( ). _concat $_CPPINCFLAGS . : ) ) ) ) ) ) ( TARGET ) ) ( SOURCE ) ) affect_signature $( $) (signature) . env['_CPPINCFLAGS'] = '${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE, affect_signature=False)}' CONFIGUREDIR Configure . .sconf_temp SConstruct . (variant directories) configure $CONFIGUREDIR $CONFIGURELOG . CONFIGURELOG (log) Configure. config.log SConstruct . configure $CONFIGUREDIR $CONFIGURELOG . _CPPDEFFLAGS C . $_CPPDEFFLAGS $CPPDEFPREFIX $CPPDEFSUFFIX $CPPDEFINES . CPPDEFINES C. $_CPPDEFFLAGS $CPPDEFINES : o $CPPDEFINES $CPPDEFPREFIX $CPPDEFSUFFIX (whitespace) $CPPDEFINES . # Adds -Dxyz to POSIX compiler command lines, # and /Dxyz to Microsoft Visual C++ command lines. env = Environment(CPPDEFINES='xyz') o $CPPDEFINES $CPPDEFPREFIX $CPPDEFSUFFIX . (tuple) . None / name=definition . # Adds -DB=2 -DA to POSIX compiler command lines, # and /DB=2 /DA to Microsoft Visual C++ command lines. env = Environment(CPPDEFINES=[('B', 2), 'A']) o $CPPDEFINES (dictionary) $CPPDEFPREFIX $CPPDEFSUFFIX . None ( ) ( ) / name=definition . # Adds -DA -DB=2 to POSIX compiler command lines, # or /DA /DB=2 to Microsoft Visual C++ command lines. env = Environment(CPPDEFINES={'B':2, 'A':None}) $CPPDEFINES / . SCons . SCons . (quoting) . (function-like) ( ). Python (escaped) . : env = Environment(CPPDEFINES=['USE_ALT_HEADER=\\"foo_alt.h\\"']) env = Environment(CPPDEFINES=[('USE_ALT_HEADER', '\\"foo_alt.h\\"')]) : 4.5: SCons $CPPDEFINES . Python . CPPDEFPREFIX C . $_CPPDEFFLAGS $CPPDEFINES . CPPDEFSUFFIX C . $_CPPDEFFLAGS $CPPDEFINES . CPPFLAGS C . C C C++ $CCCOM $SHCCCOM $CXXCOM $SHCXXCOM $FORTRANPPCOM $SHFORTRANPPCOM $F77PPCOM $SHF77PPCOM Fortran $ASPPCOM ( C) . include -I ( ) scons $CPPPATH . $_CPPINCFLAGS . _CPPINCFLAGS C include . $_CPPINCFLAGS $INCPREFIX $INCSUFFIX $CPPPATH . CPPPATH C include . C/C++ include . include $CCFLAGS $CXXFLAGS . $CPPPATH os.pathsep Python . : $CPPPATH SConscript . scons # : env = Environment(CPPPATH='#/include') Dir : include = Dir('include') env = Environment(CPPPATH=include) $_CPPINCFLAGS $INCPREFIX $INCSUFFIX $CPPPATH . $CPPPATH $_CPPINCFLAGS : env = Environment(CCCOM="my_compiler $_CPPINCFLAGS -c -o $TARGET $SOURCE") CPPSUFFIXES C ( #include) . : [".c", ".C", ".cxx", ".cpp", ".c++", ".cc", ".h", ".H", ".hxx", ".hpp", ".hh", ".F", ".fpp", ".FPP", ".m", ".mm", ".S", ".spp", ".SPP"] CXX C++. (shared objects) $SHCXX . CXXCOM C++ . $CXXFLAGS $CPPFLAGS . (shared objects) $SHCXXCOM . CXXCOMSTR C++ () . $CXXCOM ( ) . $SHCXXCOMSTR . env = Environment(CXXCOMSTR = "Compiling static object $TARGET") CXXFILESUFFIX C++. CXXFile C++ Lex (.ll) YACC (.yy) . .cc . SCons .cpp .cxx .c++ .C++ C++ .mm Objective-C++ . (Linux UNIX POSIX) SCons .C ( ) C++ . CXXFLAGS C++ . $CCFLAGS $CCFLAGS C C++ . C++ $CXXFLAGS . $SHCXXFLAGS . CXXVERSION C++. C++ . DC D . SCons D : DMD (dmd) LDC (ldc) D LLVM GDC (gdc) (GNU Compiler Collection) . . $SHDC . DCOM D . $DFLAGS . $SHDCOM . ProgramAllAtOnce . DCOMSTR D . $DCOM ( ) . $SHDCOMSTR . DDEBUG (debug tags) . DDEBUGPREFIX $DDEBUG. D . DDEBUGSUFFIX $DDEBUG. DESCRIPTION . . Package . DESCRIPTION_lang lang . %description -l .spec RPM . Package . DFILESUFFIX D. .d . DFLAGPREFIX $DFLAGS . DFLAGS D . DFLAGSUFFIX $DFLAGS . DI_FILE_DIR D C . DI_FILE_DIR_PREFIX D $DI_FILE_DIR. DI_FILE_DIR_SUFFFIX D $DI_FILE_DIR. DI_FILE_SUFFIX D C . .di . DINCPREFIX $DPATH. DINCSUFFIX $DPATH. Dir Dir . Dirs Dir . DLIB D. DLIBCOM . DLIBDIRPREFIX $LIBPATH D. DLIBDIRSUFFIX $LIBPATH D. DLIBFLAGPREFIX $DLIBFLAGS. DLIBFLAGS . DLIBFLAGSUFFIX $DLIBFLAGS. DLIBLINKPREFIX $LIBS. DLIBLINKSUFFIX $LIBS. DLINK D . $SHDLINK . DLINKCOM D . $SHDLINKCOM . DLINKFLAGPREFIX $DLINKFLAGS. DLINKFLAGS . $SHDLINKFLAGS . DLINKFLAGSUFFIX $DLINKFLAGS. DOCBOOK_DEFAULT_XSL_EPUB XSLT DocbookEpub XSLT . DOCBOOK_DEFAULT_XSL_HTML XSLT DocbookHtml XSLT . DOCBOOK_DEFAULT_XSL_HTMLCHUNKED XSLT DocbookHtmlChunked XSLT . DOCBOOK_DEFAULT_XSL_HTMLHELP XSLT DocbookHtmlhelp XSLT . DOCBOOK_DEFAULT_XSL_MAN XSLT DocbookMan XSLT . DOCBOOK_DEFAULT_XSL_PDF XSLT DocbookPdf XSLT . DOCBOOK_DEFAULT_XSL_SLIDESHTML XSLT DocbookSlidesHtml XSLT . DOCBOOK_DEFAULT_XSL_SLIDESPDF XSLT DocbookSlidesPdf XSLT . DOCBOOK_FOP PDF fop xep ( fop ). DOCBOOK_FOPCOM PDF fop xep. DOCBOOK_FOPCOMSTR fop xep PDF XML . DOCBOOK_FOPFLAGS PDF fop xep. DOCBOOK_XMLLINT xmllint . XInclude lxml . DOCBOOK_XMLLINTCOM xmllint. DOCBOOK_XMLLINTCOMSTR xmllint XInclude XML . DOCBOOK_XMLLINTFLAGS xmllint. DOCBOOK_XSLTPROC xsltproc ( saxon xalan) . XSL lxml . DOCBOOK_XSLTPROCCOM xsltproc ( saxon xalan). DOCBOOK_XSLTPROCCOMSTR xsltproc XML XSLT . DOCBOOK_XSLTPROCFLAGS xsltproc ( saxon xalan). DOCBOOK_XSLTPROCPARAMS XSLT XSL . saxon saxon-xslt . DPATH (import modules). DRPATHPREFIX (shared objects) rpath . DRPATHSUFFIX (shared objects) rpath . DSUFFIXES D . ['.d'] . DVERPREFIX $DVERSIONS . DVERSIONS . DVERSUFFIX $DVERSIONS . DVIPDF TeX DVI PDF. DVIPDFCOM TeX DVI PDF . DVIPDFCOMSTR TeX DVI PDF . $DVIPDFCOM ( ) . DVIPDFFLAGS TeX DVI PDF. DVIPS TeX DVI PostScript. DVIPSFLAGS TeX DVI PostScript. ENV (execution environment) - SCons . $ENV . . SCons scons (<< >>) . scons . . PATH scons ( ) : import os env = Environment(ENV={'PATH': os.environ['PATH']}) : import os env = Environment(ENV=os.environ.copy()) ESCAPE (escape ) . : . F03 Fortran 03. $FORTRAN . $F03 Fortran 03 . F03COM Fortran 03 . $F03COM Fortran 03 . $FORTRANCOM . F03COMSTR Fortran 03 . $F03COM $FORTRANCOM ( ) . F03FILESUFFIXES F03 . ['.f03'] F03FLAGS Fortran 03 . include -I ( ) scons $F03PATH . $_F03INCFLAGS . $F03FLAGS Fortran 03 . $FORTRANFLAGS . _F03INCFLAGS Fortran 03 include . $_F03INCFLAGS $INCPREFIX $INCSUFFIX $F03PATH . F03PATH Fortran 03 include . include . include $F03FLAGS . : $F03PATH SConscript . scons # : $F03PATH include Fortran 03 . $FORTRANPATH include Fortran Fortran . env = Environment(F03PATH='#/include') Dir() : include = Dir('include') env = Environment(F03PATH=include) $_F03INCFLAGS $INCPREFIX $INCSUFFIX $F03PATH . F03PATH $_F03INCFLAGS : env = Environment(F03COM="my_compiler $_F03INCFLAGS -c -o $TARGET $SOURCE") F03PPCOM Fortran 03 C. $F03FLAGS $CPPFLAGS . $F03PPCOM C Fortran 03 . $FORTRANPPCOM C Fortran . F03PPCOMSTR Fortran 03 C . $F03PPCOM $FORTRANPPCOM ( ) . F03PPFILESUFFIXES + F03 . . F08 Fortran 08. $FORTRAN Fortran Fortran . $F08 Fortran 08 . F08COM Fortran 08 . $F08COM Fortran 08 . $FORTRANCOM Fortran . F08COMSTR Fortran 08 . $F08COM $FORTRANCOM ( ) . F08FILESUFFIXES F08 . ['.f08'] . F08FLAGS Fortran 08 . include -I ( ) scons $F08PATH . $_F08INCFLAGS . $F08FLAGS Fortran 08 . $FORTRANFLAGS Fortran Fortran . _F08INCFLAGS Fortran 08 include . $_F08INCFLAGS $INCPREFIX $INCSUFFIX $F08PATH . F08PATH Fortran 08 include . include . include $F08FLAGS . : $F08PATH SConscript . scons # : $F08PATH include Fortran 08 . $FORTRANPATH include Fortran Fortran . env = Environment(F08PATH='#/include') Dir() : include = Dir('include') env = Environment(F08PATH=include) $_F08INCFLAGS $INCPREFIX $INCSUFFIX $F08PATH . F08PATH $_F08INCFLAGS : env = Environment(F08COM="my_compiler $_F08INCFLAGS -c -o $TARGET $SOURCE") F08PPCOM Fortran 08 (object file) C . $F08FLAGS $CPPFLAGS . $F08PPCOM C Fortran 08 . $FORTRANPPCOM C Fortran . F08PPCOMSTR Fortran 08 C . $F08PPCOM $FORTRANPPCOM ( ) . F08PPFILESUFFIXES + F08 . . F77 Fortran 77. $FORTRAN Fortran Fortran . $F77 Fortran 77 . F77COM Fortran 77 . $F77COM Fortran 77 . $FORTRANCOM Fortran . F77COMSTR Fortran 77 . $F77COM $FORTRANCOM ( ) . F77FILESUFFIXES F77 . ['.f77'] . F77FLAGS Fortran 77 . include -I ( ) scons $F77PATH . $_F77INCFLAGS . $F77FLAGS Fortran 77 . $FORTRANFLAGS Fortran Fortran . _F77INCFLAGS Fortran 77 include . $_F77INCFLAGS $INCPREFIX $INCSUFFIX $F77PATH . F77PATH Fortran 77 include . include . include $F77FLAGS . : $F77PATH SConscript . scons # : $F77PATH include Fortran 77 . $FORTRANPATH include Fortran Fortran . env = Environment(F77PATH='#/include') Dir() : include = Dir('include') env = Environment(F77PATH=include) $_F77INCFLAGS $INCPREFIX $INCSUFFIX $F77PATH . F77PATH $_F77INCFLAGS : env = Environment(F77COM="my_compiler $_F77INCFLAGS -c -o $TARGET $SOURCE") F77PPCOM Fortran 77 C . $F77FLAGS $CPPFLAGS . $F77PPCOM C Fortran 77 . $FORTRANPPCOM C Fortran . F77PPCOMSTR Fortran 77 C . $F77PPCOM $FORTRANPPCOM ( ) . F77PPFILESUFFIXES + F77 . . F90 Fortran 90. $FORTRAN Fortran Fortran . $F90 Fortran 90 . F90COM Fortran 90 . $F90COM Fortran 90 . $FORTRANCOM Fortran . F90COMSTR Fortran 90 . $F90COM $FORTRANCOM ( ) . F90FILESUFFIXES F90 . ['.f90'] . F90FLAGS Fortran 90 . include -I ( ) scons $F90PATH . $_F90INCFLAGS . $F90FLAGS Fortran 90 . $FORTRANFLAGS Fortran Fortran . _F90INCFLAGS Fortran 90 include . $_F90INCFLAGS $INCPREFIX $INCSUFFIX $F90PATH . F90PATH Fortran 90 include . include . include $F90FLAGS . : $F90PATH SConscript . scons # : $F90PATH include Fortran 90 . $FORTRANPATH include Fortran Fortran . env = Environment(F90PATH='#/include') Dir() : include = Dir('include') env = Environment(F90PATH=include) $_F90INCFLAGS $INCPREFIX $INCSUFFIX $F90PATH . F90PATH $_F90INCFLAGS : env = Environment(F90COM="my_compiler $_F90INCFLAGS -c -o $TARGET $SOURCE") F90PPCOM Fortran 90 C . $F90FLAGS $CPPFLAGS . $F90PPCOM C Fortran 90 . $FORTRANPPCOM C Fortran . F90PPCOMSTR Fortran 90 C . $F90PPCOM $FORTRANPPCOM ( ) . F90PPFILESUFFIXES + F90 . . F95 Fortran 95. $FORTRAN Fortran Fortran . $F95 Fortran 95 . F95COM Fortran 95 (object file). $F95COM Fortran 95 . $FORTRANCOM Fortran . F95COMSTR Fortran 95 . $F95COM $FORTRANCOM ( ) . F95FILESUFFIXES F95 . ['.f95'] . F95FLAGS Fortran 95 . include -I ( ) scons $F95PATH . $_F95INCFLAGS . $F95FLAGS Fortran 95 . $FORTRANFLAGS Fortran . _F95INCFLAGS Fortran 95 include . $_F95INCFLAGS $INCPREFIX $INCSUFFIX $F95PATH . F95PATH Fortran 95 include . include . include $F95FLAGS . : $F95PATH SConscript . scons # : $F95PATH include Fortran 95 . $FORTRANPATH include Fortran Fortran . env = Environment(F95PATH='#/include') Dir() : include = Dir('include') env = Environment(F95PATH=include) $_F95INCFLAGS $INCPREFIX $INCSUFFIX $F95PATH . F95PATH $_F95INCFLAGS : env = Environment(F95COM="my_compiler $_F95INCFLAGS -c -o $TARGET $SOURCE") F95PPCOM Fortran 95 C. $F95FLAGS $CPPFLAGS . $F95PPCOM C Fortran 95 . $FORTRANPPCOM C Fortran . F95PPCOMSTR Fortran 95 C . $F95PPCOM $FORTRANPPCOM ( ) . F95PPFILESUFFIXES + F95 . . File File . FILE_ENCODING Textfile Substfile . "utf-8" . 4.5.0. FORTRAN Fortran Fortran. FORTRANCOM Fortran (object file) . $FORTRANFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS . FORTRANCOMMONFLAGS Fortran . $FORTRANFLAGS . 4.4. FORTRANCOMSTR Fortran . $FORTRANCOM ( ) . FORTRANFILESUFFIXES FORTRAN . ['.f', '.for', '.ftn'] FORTRANFLAGS FORTRAN Fortran . include -I ( ) scons $FORTRANPATH . $_FORTRANINCFLAGS $_FORTRANMODFLAG . _FORTRANINCFLAGS Fortran include . $_FORTRANINCFLAGS $INCPREFIX $INCSUFFIX $FORTRANPATH . FORTRANMODDIR Fortran . . Fortran . FORTRANMODDIRPREFIX Fortran . $_FORTRANMODFLAG $FORTRANMODDIR . FORTRANMODDIRSUFFIX Fortran . $_FORTRANMODFLAG $FORTRANMODDIR . _FORTRANMODFLAG Fortran Fortran . $_FORTRANMODFLAG $FORTRANMODDIRPREFIX $FORTRANMODDIRSUFFIX $FORTRANMODDIR . FORTRANMODPREFIX Fortran. SCons Fortran module_name.mod . . . scons . FORTRANMODSUFFIX Fortran. SCons Fortran module_name.mod . ".mod" . . scons . FORTRANPATH Fortran include ( ) . Fortran include ( ). include FORTRANFLAGS . : FORTRANPATH SConscript . scons # : env = Environment(FORTRANPATH='#/include') Dir() : include = Dir('include') env = Environment(FORTRANPATH=include) $_FORTRANINCFLAGS $INCPREFIX $INCSUFFIX $FORTRANPATH . FORTRANPATH $_FORTRANINCFLAGS : env = Environment(FORTRANCOM="my_compiler $_FORTRANINCFLAGS -c -o $TARGET $SOURCE") FORTRANPPCOM Fortran (object file) C . $FORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS . FORTRANPPCOMSTR Fortran C . $FORTRANPPCOM ( ) . FORTRANPPFILESUFFIXES + FORTRAN . ['.fpp', '.FPP'] . FORTRANSUFFIXES Fortran ( INCLUDE USE) . : [".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP", ".f77", ".F77", ".f90", ".F90", ".f95", ".F95"] FRAMEWORKPATH Mac OS X gcc framework. include #include . framework ( $FRAMEWORKS). : env.AppendUnique(FRAMEWORKPATH='#myframeworkdir') ... -Fmyframeworkdir . _FRAMEWORKPATH Mac OS X gcc $FRAMEWORKPATH . FRAMEWORKPATHPREFIX Mac OS X gcc FRAMEWORKPATH ( $FRAMEWORKPATH). -F . FRAMEWORKPREFIX Mac OS X gcc framework ( $FRAMEWORKS). -framework . FRAMEWORKS Mac OS X gcc framework bundle. . : env.AppendUnique(FRAMEWORKS=Split('System Cocoa SystemConfiguration')) _FRAMEWORKS Mac OS X gcc FRAMEWORKS. FRAMEWORKSFLAGS Mac OS X gcc framework (loadable module). ( $FRAMEWORKPATH $FRAMEWORKPATHPREFIX $FRAMEWORKPREFIX $FRAMEWORKS .) GS Ghostscript PostScript PDF . GSCOM Ghostscript . "$GS $GSFLAGS -sOutputFile=$TARGET $SOURCES" . GSCOMSTR Ghostscript . ( ) $GSCOM ( ) . GSFLAGS Ghostscript PostScript PDF. "-dNOPAUSE -dBATCH -sDEVICE=pdfwrite" . HOST_ARCH . ( $PLATFORM platform Environment). platform.machine Python . win32 Microsoft Visual C++ msvc $HOST_ARCH $TARGET_ARCH . . x86 arm amd64 arm64 x86_64 . . $HOST_ARCH . HOST_OS . ( $PLATFORM platform Environment). . $HOST_OS SCons . IDLSUFFIXES IDL ( #include import) . : [".idl", ".IDL"] IMPLIBNOVERSIONSYMLINKS (override ) $SHLIBNOVERSIONSYMLINKS/$LDMODULENOVERSIONSYMLINKS (import library) / . $SHLIBNOVERSIONSYMLINKS/$LDMODULENOVERSIONSYMLINKS . IMPLIBPREFIX . cygwin (libfoo.dll.a) (cygfoo.dll) . cyglink $IMPLIBPREFIX 'lib' $SHLIBPREFIX 'cyg' . IMPLIBSUFFIX . cygwin (libfoo.dll.a) (cygfoo.dll) . cyglink $IMPLIBSUFFIX '.dll.a' $SHLIBSUFFIX '.dll' . IMPLIBVERSION $SHLIBVERSION/$LDMODULEVERSION / . $SHLIBVERSION/$LDMODULEVERSION . IMPLICIT_COMMAND_DEPENDENCIES SCons ( ) . SCons ( ) . SCons . (env['ENV']['PATH']) . $IMPLICIT_COMMAND_DEPENDENCIES ("none" "false" "no" "off" "0" 0) . 1 "all" . N N "all" . . $IMPLICIT_COMMAND_DEPENDENCIES . $IMPLICIT_COMMAND_DEPENDENCIES . AND (&&) . $IMPLICIT_COMMAND_DEPENDENCIES "all" 1 . INCPREFIX include C . $CPPPATH $FORTRANPATH $_CPPINCFLAGS $_FORTRANINCFLAGS . INCSUFFIX include C . $CPPPATH $FORTRANPATH $_CPPINCFLAGS $_FORTRANINCFLAGS . INSTALL . ( ). : def install(dest, source, env): dest . source . env ( ) . INSTALLSTR . : Install file: "$SOURCE" as "$TARGET" INTEL_C_COMPILER_VERSION intelc Intel C . JAR (Java archive tool). JARCHDIR ( -C). JARCOM . JARCOMSTR . $JARCOM ( ) . env = Environment(JARCOMSTR="JARchiving $SOURCES into $TARGET") JARFLAGS . cf jar . JARSUFFIX .jar . JAVABOOTCLASSPATH (bootstrap class files) . Node Node . -bootclasspath JDK . $JAVABOOTCLASSPATH SCons . $JAVABOOTCLASSPATH (: POSIX ; Windows) $JAVABOOTCLASSPATH . JDK 9 . JAVAC . JAVACCOM . $JAVACFLAGS . JAVACCOMSTR . $JAVACCOM ( ) . env = Environment(JAVACCOMSTR="Compiling class files $TARGETS from $SOURCES") JAVACFLAGS . JAVACLASSDIR . .class JavaH . JAVACLASSPATH JDK . Node Node . (.jar .zip) (*) .jar . Java . -classpath JDK . SCons $JAVACLASSPATH . $JAVACLASSPATH (: POSIX ; Windows) . JDK $JAVACLASSPATH . SCons javac $JAVASOURCEPATH -sourcepath () () Java -sourcepath . Java javac: " --source-path -sourcepath ." -sourcepath javac $JAVACLASSPATH . JAVACLASSSUFFIX Java .class. JAVAH Java C. JAVAHCOM C Java. $JAVAHFLAGS . JAVAHCOMSTR C Java . $JAVAHCOM ( ) . env = Environment(JAVAHCOMSTR="Generating header/stub file(s) $TARGETS from $SOURCES") JAVAHFLAGS C Java. JAVAINCLUDES include Java ( jni.h). JAVAPROCESSORPATH (annotation processor) . Node Node . -processorpath JDK . SCons $JAVAPROCESSORPATH . $JAVAPROCESSORPATH (: POSIX ; Windows) $JAVAPROCESSORPATH . 4.5.0 JAVASOURCEPATH () .java . Node Node . -sourcepath JDK . SCons $JAVASOURCEPATH . $JAVASOURCEPATH (: POSIX ; Windows) $JAVASOURCEPATH . -sourcepath . SCons $JAVASOURCEPATH .java . JAVASUFFIX Java .java . JAVAVERSION Java Java . Java javac . Java 1.5 (nested anonymous inner classes) SCons javac . $JAVAVERSION 1.4 SCons . 1.4 . Java Windows . $JAVAC ( ) Java . Windows alternatives Java . LATEX LaTeX. LATEXCOM LaTeX . LATEXCOMSTR LaTeX . $LATEXCOM ( ) . env = Environment(LATEXCOMSTR = "Building $TARGET from LaTeX input $SOURCES") LATEXFLAGS LaTeX. LATEXRETRIES .log $LATEXCOM LaTeX . LaTeX . LATEXSUFFIXES LaTeX ( \include \import) . : [".tex", ".ltx", ".latex"] LDMODULE (linker) . $SHLINK . LDMODULECOM . Mac OS X $LDMODULE $LDMODULEFLAGS $FRAMEWORKSFLAGS . $SHLINK . LDMODULECOMSTR . $LDMODULECOM ( ) . LDMODULEEMITTER (emitter) LoadableModule . "Builder Objects" . LDMODULEFLAGS . LDMODULENOVERSIONSYMLINKS LoadableModule . $SHLIBNOVERSIONSYMLINKS . LDMODULEPREFIX . Mac OS X (null) $SHLIBPREFIX . _LDMODULESONAME $SONAME $TARGET $LDMODULEVERSION $LDMODULESUFFIX . SONAME ( gnulink) LoadableModule . LDMODULESUFFIX . Mac OS X (null) $SHLIBSUFFIX . LDMODULEVERSION LoadableModule . $_LDMODULEVERSIONFLAGS $LDMODULECOM . $LDMODULEVERSION $SHLIBVERSION . _LDMODULEVERSIONFLAGS LoadableModule ( $LDMODULEVERSION ) $LDMODULECOM . $_LDMODULEVERSIONFLAGS $SHLIBVERSIONFLAGS ( -Wl,-soname=$_LDMODULESONAME) . ( ) . LDMODULEVERSIONFLAGS LoadableModule $LDMODULECOM . $LDMODULEVERSION . LEX . LEX_HEADER_FILE C . --header-file= . --header-file= $LEXFLAGS . LEX_TABLES_FILE lex . --tables-file= . --tables-file= $LEXFLAGS . LEXCOM . LEXCOMSTR . $LEXCOM ( ) . env = Environment(LEXCOMSTR="Lex'ing $TARGET from $SOURCES") LEXFLAGS . lex . GNU flex --header-file= --tables-file= . --header-file= --tables-file= SCons . $LEX_HEADER_FILE $LEX_TABLES_FILE . LEXUNISTD Windows lex unistd.h . --nounistd . _LIBDIRFLAGS . $_LIBDIRFLAGS $LIBDIRPREFIX $LIBDIRSUFFIX $LIBPATH . LIBDIRPREFIX . $_LIBDIRFLAGS $LIBPATH . LIBDIRSUFFIX . $LIBPATH $_LIBDIRFLAGS . LIBEMITTER (emitter) StaticLibrary . <> emitter . _LIBFLAGS . $_LIBFLAGS $LIBLINKPREFIX $LIBLINKSUFFIX $LIBS . LIBLINKPREFIX . $LIBS $_LIBFLAGS . LIBLINKSUFFIX . $LIBS $_LIBFLAGS . LIBLITERALPREFIX ( ) $LIBLITERALPREFIX . GNU : " -l:foo foo libfoo.so libfoo.a . " $LIBLITERALPREFIX SCons $LIBS . $LIBLINKPREFIX $LIBLINKSUFFIX . . $LIBS env.Append(LIBS=":libmylib.a") () . File . LIBPATH $LIBS . $LIBPATH os.pathsep Python . $LINKFLAGS $SHLINKFLAGS (non-portable) . : $LIBPATH SConscript . scons # : env = Environment(LIBPATH='#/libs') Dir : libs = Dir('libs') env = Environment(LIBPATH=libs) $_LIBDIRFLAGS $LIBDIRPREFIX $LIBDIRSUFFIX $LIBPATH . $LIBPATH $_LIBDIRFLAGS : env = Environment(LINKCOM="my_linker $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET $SOURCE") LIBPREFIX () . (posix win32 os2 ) (ar mslib sgiar sunar tlib ) . LIBPREFIXES . SCons $LIBSUFFIXES . LIBS (override) (link line) . lib .so .dll. SCons $LIBPREFIXES $LIBSUFFIXES : POSIX .dll . $LIBS (path component) : $LIBPATH (linker) . $LIBLITERALPREFIX $LIBS $LIBLITERALPREFIX ( / ). $LIBS Node ( (Builder) File) Node $_LIBFLAGS - $LIBLINKPREFIX $LIBLINKSUFFIX. ( ) . : env.Append(LIBS=File('/tmp/mylib.so')) Builder SCons $LIBS . $_LIBFLAGS $LIBLINKPREFIX $LIBLINKSUFFIX . $LIBS $LIBS $_LIBFLAGS ( $_LIBDIRFLAGS) . : env = Environment(LINKCOM="my_linker $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET $SOURCE") LIBSUFFIX () . (posix win32 os2 ) (ar mslib sgiar sunar tlib ) . LIBSUFFIXES . SCons $LIBPREFIXES . LICENSE SPDX (GPL-3.0 LGPL-2.1 BSD-2-Clause ). SPDX http://www.opensource.org/licenses/alphabetical[7] . Package . LINESEPARATOR Substfile Textfile. . . LINGUAS_FILE $LINGUAS_FILE () POInit POUpdate MOFiles . Translate . . $LINGUAS_FILE . $LINGUAS_FILE (truthy) LINGUAS . LINK . $SHLINK . POSIX ( link ) <<>> . $CXX C++ smartlink . LINKCOM . $SHLINKCOM . LINKCOMSTR . $LINKCOM ( ) . $SHLINKCOMSTR . env = Environment(LINKCOMSTR = "Linking $TARGET") LINKFLAGS . -l ( ) $LIBS -L ( ) scons $LIBPATH . $_LIBFLAGS $_LIBDIRFLAGS . $SHLINKFLAGS . M4 M4. M4COM M4 . M4COMSTR M4 . $M4COM ( ) . M4FLAGS M4 . MAKEINDEX makeindex TeX LaTeX. MAKEINDEXCOM makeindex TeX LaTeX . MAKEINDEXCOMSTR makeindex TeX LaTeX . $MAKEINDEXCOM ( ) . MAKEINDEXFLAGS makeindex TeX LaTeX . MAXLINELENGTH . Win32 . MIDL Microsoft IDL. MIDLCOM Microsoft IDL . MIDLCOMSTR Microsoft IDL . $MIDLCOM ( ) . MIDLFLAGS Microsoft IDL . MOSUFFIX MO (: '.mo'). msgfmt MOFiles . MSGFMT msgfmt(1) Detect(). msgfmt MOFiles . MSGFMTCOM msgfmt(1). msgfmt MOFiles . MSGFMTCOMSTR msgfmt(1) (: '' << $MSGFMTCOM>>). msgfmt MOFiles . MSGFMTFLAGS msgfmt(1). msgfmt MOFiles . MSGINIT msginit(1) ( Detect). msginit POInit . MSGINITCOM msginit(1). msginit POInit . MSGINITCOMSTR msginit(1) . ($MSGINITCOM) . msginit POInit . MSGINITFLAGS msginit(1) (: []). msginit POInit . _MSGINITLOCALE <<>> . () (: '${TARGET.filebase}'). msginit POInit . MSGMERGE msgmerge(1) Detect() . msgmerge POUpdate . MSGMERGECOM msgmerge(1). msgmerge POUpdate . MSGMERGECOMSTR msgmerge(1) . ($MSGMERGECOM) . msgmerge POUpdate . MSGMERGEFLAGS msgmerge(1). msgmerge POUpdate . MSSDK_DIR Microsoft SDK ( Platform SDK Windows SDK) . MSSDK_VERSION Microsoft SDK ( Platform SDK Windows SDK) . 6.1 6.0A 6.0 2003R2 2003R1 . MSVC_BATCH (true) SCons Microsoft Visual C++ . SCons (construction environment) . ( $CHANGED_SOURCES). () ( .obj) . MSVC_NOTFOUND_POLICY scons Microsoft Visual C++ . $MSVC_NOTFOUND_POLICY scons msvc msvc . $MSVC_NOTFOUND_POLICY scons : 'Error' 'Exception' msvc msvc (exception) . 'Warning' 'Warn' msvc msvc . . 'Ignore' 'Suppress' msvc msvc . . : (camel case) . $MSVC_NOTFOUND_POLICY : o $MSVC_VERSION ( ) msvc . o $MSVC_VERSION ( tools=['default']) msvc . o msvc ( tools=['msvc', 'mslink']). $MSVC_NOTFOUND_POLICY : o $MSVC_VERSION ( ). o $MSVC_VERSION ( tools=['default']). o msvc ( tools=['mingw']). : o $MSVC_NOTFOUND_POLICY Environment msvc ( msvc msvs ) Environment . $MSVC_NOTFOUND_POLICY msvc . $MSVC_NOTFOUND_POLICY scons . scons . 4.4 MSVC_SCRIPT_ARGS batch file Microsoft Visual C++ . $MSVC_SCRIPT_ARGS batch file msvc (construction variables) . $MSVC_SCRIPT_ARGS ( $MSVC_TOOLSET_VERSION) . $MSVC_SCRIPT_ARGS : None . $MSVC_SCRIPT_ARGS ( <<>> "flattened" ). batch file msvc . $MSVC_SCRIPT_ARGS None . . (exception) : o $MSVC_SCRIPT_ARGS Visual Studio 2013 . o SDK ( '10.0.20348.0') $MSVC_SCRIPT_ARGS . o $MSVC_SDK_VERSION SDK ( '10.0.20348.0') $MSVC_SCRIPT_ARGS . SDK $MSVC_SDK_VERSION $MSVC_SCRIPT_ARGS . o toolset ( '-vcvars_ver=14.29') $MSVC_SCRIPT_ARGS . o $MSVC_TOOLSET_VERSION toolset ( '-vcvars_ver=14.29') $MSVC_SCRIPT_ARGS . toolset $MSVC_TOOLSET_VERSION $MSVC_SCRIPT_ARGS . o spectre ( '-vcvars_spectre_libs=spectre') $MSVC_SCRIPT_ARGS . o $MSVC_SPECTRE_LIBS spectre ( '-vcvars_spectre_libs=spectre') $MSVC_SCRIPT_ARGS . spectre $MSVC_SPECTRE_LIBS $MSVC_SCRIPT_ARGS . o UWP ( uwp store) $MSVC_SCRIPT_ARGS . o $MSVC_UWP_APP UWP ( uwp store) $MSVC_SCRIPT_ARGS . UWP $MSVC_UWP_APP $MSVC_SCRIPT_ARGS . - Visual Studio 2022 SDK toolset : env = Environment(MSVC_VERSION='14.3', MSVC_SCRIPT_ARGS='10.0.20348.0 -vcvars_ver=14.29.30133') - Visual Studio 2022 SDK toolset : env = Environment(MSVC_VERSION='14.3', MSVC_SCRIPT_ARGS=['10.0.20348.0', '-vcvars_ver=14.29.30133']) : o $MSVC_SCRIPT_ARGS Environment msvc ( msvc msvs ) Environment . $MSVC_SCRIPT_ARGS msvc . o $MSVC_SCRIPT_ARGS . o / $MSVC_SCRIPT_ARGS . msvc msvc . 4.4 MSVC_SCRIPTERROR_POLICY scons Microsoft Visual C++ . $MSVC_SCRIPTERROR_POLICY scons msvc . $MSVC_SCRIPTERROR_POLICY scons msvc . msvc . scons msvc . $MSVC_SCRIPTERROR_POLICY scons : 'Error' 'Exception' msvc . 'Warning' 'Warn' msvc . 'Ignore' 'Suppress' msvc . 4.4 : (camel case) . - Visual Studio 2022 : env = environment(MSVC_VERSION='14.3', MSVC_SCRIPT_ARGS=['8.1', 'store', '-vcvars_ver=14.1']) env.Program('hello', ['hello.c'], CCFLAGS='/MD', LIBS=['kernel32', 'user32', 'runtimeobject']) - : ... link /nologo /OUT:_build001\hello.exe kernel32.lib user32.lib runtimeobject.lib _build001\hello.obj LINK : fatal error LNK1104: cannot open file 'MSVCRT.lib' ... - Visual Studio 2022 msvc: env = environment(MSVC_VERSION='14.3', MSVC_SCRIPT_ARGS=['8.1', 'store', '-vcvars_ver=14.1'], MSVC_SCRIPTERROR_POLICY='warn') env.Program('hello', ['hello.c'], CCFLAGS='/MD', LIBS=['kernel32', 'user32', 'runtimeobject']) - : ... scons: warning: vc script errors detected: [ERROR:vcvars.bat] The UWP Application Platform requires a Windows 10 SDK. [ERROR:vcvars.bat] WindowsSdkDir = "C:\Program Files (x86)\Windows Kits\8.1\" [ERROR:vcvars.bat] host/target architecture is not supported : { x64 , x64 } ... link /nologo /OUT:_build001\hello.exe kernel32.lib user32.lib runtimeobject.lib _build001\hello.obj LINK : fatal error LNK1104: cannot open file 'MSVCRT.lib' : o $MSVC_SCRIPTERROR_POLICY msvc ( msvc msvs ) Environment Environment . $MSVC_SCRIPTERROR_POLICY msvc . o scons Windows msvc . Visual Studio msvc msvc . ( 'Error') . 4.4 MSVC_SDK_VERSION Microsoft Software Development Kit (SDK). $MSVC_SDK_VERSION : None SDK ( '10.0.20348.0'). None $MSVC_SDK_VERSION . . : o $MSVC_SDK_VERSION Visual Studio 2013 . o $MSVC_SDK_VERSION SDK $MSVC_SCRIPT_ARGS . SDK $MSVC_SDK_VERSION $MSVC_SCRIPT_ARGS . o $MSVC_SDK_VERSION : o '10.0.XXXXX.Y' [SDK 10.0] o '8.1' [SDK 8.1] o $MSVC_SDK_VERSION . SDK . o $MSVC_SDK_VERSION ( UWP Desktop) . SDK . o $MSVC_SDK_VERSION 8.1 UWP Visual Studio 2017 ( $MSVC_VERSION '14.0' $MSVC_TOOLSET_VERSION '14.0' ). - Visual Studio 2022 Windows SDK: env = Environment(MSVC_VERSION='14.3', MSVC_SDK_VERSION='10.0.20348.0') - Visual Studio 2022 SDK Universal Windows Platform: env = Environment(MSVC_VERSION='14.3', MSVC_SDK_VERSION='10.0.20348.0', MSVC_UWP_APP=True) : o msvc ( msvc msvs ) Environment $MSVC_SDK_VERSION Environment . $MSVC_SDK_VERSION msvc . o SDK 10.0 SDK $MSVC_SCRIPT_ARGS . o SDK SDK . o Microsoft ARM64 Windows 11 SDK ( '10.0.22000.0' ) v141 v142 ( '14.28.29333' ) . Microsoft $MSVC_SDK_VERSION Windows 10 SDK ( '10.0.20348.0') . 4.4 MSVC_SPECTRE_LIBS Microsoft Visual C++ spectre (spectre-mitigated). $MSVC_SPECTRE_LIBS : True False None. $MSVC_SPECTRE_LIBS ( True) Microsoft Visual C++ spectre Microsoft Visual C++ . : o $MSVC_SPECTRE_LIBS Visual Studio 2015 . o $MSVC_SPECTRE_LIBS spectre $MSVC_SCRIPT_ARGS . spectre $MSVC_SPECTRE_LIBS $MSVC_SCRIPT_ARGS . o $MSVC_SPECTRE_LIBS UWP . spectre (Universal Windows Platform UWP) . - Visual Studio 2022 Microsoft Visual C++ spectre: env = Environment(MSVC_VERSION='14.3', MSVC_SPECTRE_LIBS=True) : o msvc ( msvc msvs ) Environment $MSVC_SPECTRE_LIBS Environment . $MSVC_SPECTRE_LIBS msvc . o ( /Qspectre) spectre . Visual Studio . o $MSVC_SPECTRE_LIBS spectre . spectre . 4.4 MSVC_TOOLSET_VERSION (toolset) Microsoft Visual C++. $MSVC_TOOLSET_VERSION msvc . $MSVC_TOOLSET_VERSION msvc . $MSVC_VERSION msvc . $MSVC_TOOLSET_VERSION : None ( '14.29'). None $MSVC_TOOLSET_VERSION . . : o $MSVC_TOOLSET_VERSION Visual Studio 2015 . o $MSVC_TOOLSET_VERSION $MSVC_SCRIPT_ARGS . $MSVC_TOOLSET_VERSION $MSVC_SCRIPT_ARGS . o $MSVC_TOOLSET_VERSION : o 'XX.Y' o 'XX.YY' o 'XX.YY.ZZZZZ' o 'XX.YY.Z' 'XX.YY.ZZZZ' [ scons (batch) msvc ] o 'XX.YY.ZZ.N' [ SxS] o 'XX.YY.ZZ.NN' [ SxS] o msvc ( 'XX.Y') $MSVC_TOOLSET_VERSION Visual Studio 2013 ( '12.0'). o msvc ( 'XX.Y') $MSVC_TOOLSET_VERSION msvc ( '99.0'). o $MSVC_TOOLSET_VERSION . . : o $MSVC_TOOLSET_VERSION SxS : $MSVC_TOOLSET_VERSION . o $MSVC_TOOLSET_VERSION msvc ( 'XX.Y') msvc Visual Studio Microsoft Visual C++ . Visual Studio Microsoft Visual C++ . - Visual Studio : env = Environment(MSVC_TOOLSET_VERSION='14.2') - Visual Studio : env = Environment(MSVC_TOOLSET_VERSION='14.29') - Visual Studio 2022 : env = Environment(MSVC_VERSION='14.3', MSVC_TOOLSET_VERSION='14.29.30133') - Visual Studio 2022 SxS: env = Environment(MSVC_VERSION='14.3', MSVC_TOOLSET_VERSION='14.29.16.11') : o $MSVC_TOOLSET_VERSION Environment msvc ( msvc msvs ) Environment . $MSVC_TOOLSET_VERSION msvc . o $MSVC_TOOLSET_VERSION . . 4.4 MSVC_USE_SCRIPT (batch script) Microsoft Visual C++. .bat Visual Studio ( vcvars.bat) SCons ( %INCLUDE% %LIB% %PATH%) . SCons . $MSVC_USE_SCRIPT_ARGS . $MSVC_USE_SCRIPT None Visual Studio SCons cmd Visual Studio - SCons - . $MSVC_USE_SCRIPT $MSVC_VERSION $TARGET_ARCH . 4.4: $MSVC_USE_SCRIPT_ARGS . MSVC_USE_SCRIPT_ARGS $MSVC_USE_SCRIPT . 4.4 MSVC_USE_SETTINGS Microsoft Visual C++. $MSVC_USE_SETTINGS $MSVC_USE_SCRIPT / $MSVC_USE_SETTINGS None . ( %INCLUDE% %LIB% %PATH%) . SCons . Visual Studio $MSVC_USE_SCRIPT None . Microsoft Visual C++ Microsoft SDK : # Microsoft SDK 6.0 (MSVC 8.0): 64-bit host and 64-bit target msvc_use_settings = { "PATH": [ "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\VC\\Bin\\x64", "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\Bin\\x64", "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\Bin", "C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727", "C:\\Windows\\system32", "C:\\Windows", "C:\\Windows\\System32\\Wbem", "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\" ], "INCLUDE": [ "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\VC\\Include", "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\VC\\Include\\Sys", "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\Include", "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\Include\\gl", ], "LIB": [ "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\VC\\Lib\\x64", "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0\\Lib\\x64", ], "LIBPATH": [], "VSCMD_ARG_app_plat": [], "VCINSTALLDIR": [], "VCToolsInstallDir": [] } # Specifying MSVC_VERSION is recommended env = Environment(MSVC_VERSION='8.0', MSVC_USE_SETTINGS=msvc_use_settings) : o msvc ( msvc msvs ) Environment $MSVC_USE_SETTINGS Environment . $MSVC_USE_SETTINGS msvc . o msvc . . 4.4 MSVC_UWP_APP Microsoft Visual C++ Universal Windows Platform (UWP). $MSVC_UWP_APP : True '1' False '0' None. $MSVC_UWP_APP ( True '1') Microsoft Visual C++ Windows Store (runtimes) Microsoft Visual C++ . UWP App Windows Store . (exception) : o $MSVC_UWP_APP Visual Studio 2013 . o $MSVC_UWP_APP UWP $MSVC_SCRIPT_ARGS . UWP $MSVC_UWP_APP $MSVC_SCRIPT_ARGS . - Visual Studio 2022 Universal Windows Platform: env = Environment(MSVC_VERSION='14.3', MSVC_UWP_APP=True) : o msvc ( msvc msvs ) Environment $MSVC_UWP_APP Environment . $MSVC_UWP_APP msvc . o $MSVC_UWP_APP UWP . UWP . MSVC_VERSION Microsoft Visual C++. / SCons . $MSVC_VERSION SCons ( ) Microsoft Visual C++ ( preview) . $MSVC_VERSION Microsoft Visual C++ . Environment tools Microsoft Visual C++ - "defaults" ( msvc mslink masm midl msvs) . . : # MSVC_VERSION set as Environment is created env = Environment(MSVC_VERSION='14.2') # Initialization deferred with empty tools, triggered manually env = Environment(tools=[]) env['MSVC_VERSION'] = '14.2 env.Tool('msvc') env.Tool('mslink') env.Tool('msvs') $MSVC_VERSION Exp "Express" "Express for Desktop" Visual Studio . string . $MSVC_VERSION ('x' ). +-------------+--------------+-----------+-----------------+---------------+ | | | _MSVC_VER | | MSBuild / | |SCons | Visual C++ | | Visual Studio | Visual Studio | +-------------+--------------+-----------+-----------------+---------------+ |"14.5" | 14.5x | 195x | Visual Studio | 18.x | | | | | 2026 | | +-------------+--------------+-----------+-----------------+---------------+ |"14.3" | 14.3x | 193x | Visual Studio | 17.x, 17.1x | | | | | 2022 | | +-------------+--------------+-----------+-----------------+---------------+ |"14.2" | 14.2x | 192x | Visual Studio | 16.x, 16.1x | | | | | 2019 | | +-------------+--------------+-----------+-----------------+---------------+ |"14.1" | 14.1 | 191x | Visual Studio | 15.x | | | 14.1x | | 2017 | | +-------------+--------------+-----------+-----------------+---------------+ |"14.1Exp" | 14.1 | 191x | Visual Studio | 15.x | | | 14.1x | | 2017 Express | | +-------------+--------------+-----------+-----------------+---------------+ |"14.0" | 14.0 | 1900 | Visual Studio | 14.0 | | | | | 2015 | | +-------------+--------------+-----------+-----------------+---------------+ |"14.0Exp" | 14.0 | 1900 | Visual Studio | 14.0 | | | | | 2015 Express | | +-------------+--------------+-----------+-----------------+---------------+ |"12.0" | 12.0 | 1800 | Visual Studio | 12.0 | | | | | 2013 | | +-------------+--------------+-----------+-----------------+---------------+ |"12.0Exp" | 12.0 | 1800 | Visual Studio | 12.0 | | | | | 2013 Express | | +-------------+--------------+-----------+-----------------+---------------+ |"11.0" | 11.0 | 1700 | Visual Studio | 11.0 | | | | | 2012 | | +-------------+--------------+-----------+-----------------+---------------+ |"11.0Exp" | 11.0 | 1700 | Visual Studio | 11.0 | | | | | 2012 Express | | +-------------+--------------+-----------+-----------------+---------------+ |"10.0" | 10.0 | 1600 | Visual Studio | 10.0 | | | | | 2010 | | +-------------+--------------+-----------+-----------------+---------------+ |"10.0Exp" | 10.0 | 1600 | Visual C++ | 10.0 | | | | | Express 2010 | | +-------------+--------------+-----------+-----------------+---------------+ |"9.0" | 9.0 | 1500 | Visual Studio | 9.0 | | | | | 2008 | | +-------------+--------------+-----------+-----------------+---------------+ |"9.0Exp" | 9.0 | 1500 | Visual C++ | 9.0 | | | | | Express 2008 | | +-------------+--------------+-----------+-----------------+---------------+ |"8.0" | 8.0 | 1400 | Visual Studio | 8.0 | | | | | 2005 | | +-------------+--------------+-----------+-----------------+---------------+ |"8.0Exp" | 8.0 | 1400 | Visual C++ | 8.0 | | | | | Express 2005 | | +-------------+--------------+-----------+-----------------+---------------+ |"7.1" | 7.1 | 1300 | Visual Studio | 7.1 | | | | | .NET 2003 | | +-------------+--------------+-----------+-----------------+---------------+ |"7.0" | 7.0 | 1200 | Visual Studio | 7.0 | | | | | .NET 2002 | | +-------------+--------------+-----------+-----------------+---------------+ |"6.0" | 6.0 | 1100 | Visual Studio | 6.0 | | | | | 6.0 | | +-------------+--------------+-----------+-----------------+---------------+ o SCons Visual Studio IDE ( Build Tools ) Visual Studio IDE MSVSSolution MSVSProject . o Exp <> <> . Exp . Exp . : $MSVC_TOOLSET_VERSION $MSVC_SDK_VERSION $MSVC_USE_SCRIPT $MSVC_USE_SCRIPT_ARGS $MSVC_USE_SETTINGS . MSVS Microsoft Visual Studio : VERSION MSVS ( $MSVC_VERSION ) VERSIONS MSVS VCINSTALLDIR Microsoft Visual C++ VSINSTALLDIR Visual Studio FRAMEWORKDIR .NET framework FRAMEWORKVERSIONS .NET framework . FRAMEWORKVERSION .NET framework FRAMEWORKSDKDIR .NET SDK. PLATFORMSDKDIR Platform SDK. PLATFORMSDK_MODULES Platform SDK - (2-tuple) . . Visual Studio 2017 PROJECTSUFFIX SOLUTIONSUFFIX . MSVS_ARCH () . x86 . amd64 Visual Studio SCons . Visual Studio 2015 arm Visual Studio 2017 arm64 . $MSVS_ARCH Visual Studio . MSVS_PROJECT_GUID Microsoft Visual C++ ProjectGUID . . GUID . MSVS_SCC_AUX_PATH Microsoft Visual C++ SccAuxPath MSVS_SCC_PROVIDER . . MSVS_SCC_CONNECTION_ROOT SCC solution . solution Microsoft Visual C++ . SccLocalPath SccProjectFilePathRelativizedFromConnection[i] ( [i] 0 solution ) GlobalSection(SourceCodeControl) solution Microsoft Visual Studio . solution SccLocalPath[i] ( [i] 0 solution ) GlobalSection(SourceCodeControl) solution Microsoft Visual Studio . MSVS_SCC_PROVIDER . . MSVS_SCC_PROJECT_NAME MSVS_SCC_PROVIDER SccProjectName Microsoft Visual C++ . SccProjectName0 GlobalSection(SourceCodeControl) solution Microsoft Visual Studio . . MSVS_SCC_PROVIDER SccProvider Microsoft Visual C++ . SccProvider0 GlobalSection(SourceCodeControl) solution Microsoft Visual Studio . . MSVS_VERSION Microsoft Visual Studio . $MSVS_VERSION SCons ( ) Visual Studio . 6 7 (MSVS .NET) 7 . $MSVS_VERSION Environment ( '6.0' '7.0') . . 1.3.0 : $MSVS_VERSION $MSVC_VERSION . $MSVS_VERSION $MSVC_VERSION $MSVC_VERSION $MSVS_VERSION . . MSVSBUILDCOM (build) Microsoft Visual C++ . Visual Studio SCons . MSVSCLEANCOM (clean) Microsoft Visual C++ . Visual Studio SCons -c . MSVSENCODING Microsoft Visual C++ . Windows-1252 . MSVSPROJECTCOM Microsoft Visual C++ . MSVSPROJECTSUFFIX (DSP) Microsoft Visual C++. Visual Studio 2010 .vcxproj Visual Studio 2002 2008 .vcproj Visual Studio 6.0 .dsp . MSVSREBUILDCOM (rebuild) Microsoft Visual C++ . Visual Studio SCons . MSVSSCONS SCons Microsoft Visual C++. SCons . MSVSSCONSCOM SCons Microsoft Visual C++ . MSVSSCONSCRIPT sconscript ( SConstruct SConscript ) Microsoft Visual C++ ( $MSVSSCONSCOM ) . sconscript MSVSProject . MSVSSCONSFLAGS SCons Microsoft Visual C++. MSVSSOLUTIONCOM (solution) Microsoft Visual Studio . MSVSSOLUTIONSUFFIX (DSW) Microsoft Visual Studio. Visual Studio 7.x (.NET 2002) .sln Visual Studio 6.0 .dsw . MT Windows DLL EXE . : $WINDOWS_EMBED_MANIFEST. MTEXECOM Windows . : $MTSHLIBCOM. MTFLAGS $MT ( Windows). MTSHLIBCOM Windows (DLL). : $MTEXECOM. MWCW_VERSION C MetroWerks CodeWarrior . MWCW_VERSIONS C MetroWerks CodeWarrior . NAME . Package . NINJA_ALIAS_NAME (alias target) SCons ninja ( ) ninja . generate-ninja . NINJA_CMD_ARGS ninja scons SCons ninja . $NINJA_DISABLE_AUTO_RUN . : scons NINJA_CMD_ARGS=-v or scons NINJA_CMD_ARGS="-v -j 3" NINJA_COMPDB_EXPAND ninja (response files) . (true) "gcc @rsp_file" "gcc -c -o myfile.o myfile.c -Ia -DXYZ" . compdb Ninja -x Ninja V1.9.0 . NINJA_DEPFILE_PARSE_FORMAT ninja depfile . msvc gcc clang . msvc /showIncludes gcc clang -MMD -MF . NINJA_DIR builddir. ninja . Ninja: " Ninja. ... ( .) " .ninja . NINJA_DISABLE_AUTO_RUN . : False. (true) SCons ninja ninja . --disable_execute_ninja SetOption('disable_execute_ninja', True) True . NINJA_ENV_VAR_CACHE SCons . (shell) . SCons ( env['ENV']) . NINJA_FILE_NAME Ninja . ninja.build . NINJA_FORCE_SCONS_BUILD (true) ninja scons . . ninja . NINJA_GENERATED_SOURCE_ALIAS_NAME (alias) . $NINJA_GENERATED_SOURCE_SUFFIXES . ninja . NINJA_GENERATED_SOURCE_SUFFIXES SCons . _generated_sources ninja . ninja . NINJA_MSVC_DEPS_PREFIX msvc_deps_prefix. ninja . Ninja: " /showIncludes msvc " NINJA_POOL ninja_pool . NINJA_REGENERATE_DEPS (generator) depfile ninja SCons . . _NINJA_REGENERATE_DEPS_FUNC env ninja . NINJA_SCONS_DAEMON_KEEP_ALIVE SCons ninja . (: 180000) NINJA_SCONS_DAEMON_PORT TCP/IP SCons . : . (: 10000 60000) NINJA_SYNTAX ninja_syntax.py . ninja Python $NINJA_SYNTAX (syntax) . no_import_lib (static import lib) SharedLibrary MinGW Microsoft Visual Studio Metrowerks . Microsoft Visual Studio export (.exp) . OBJPREFIX (). OBJSUFFIX (). PACKAGEROOT . "$NAME-$VERSION" . Package . PACKAGETYPE Package . . . $PACKAGETYPE --package-type . Package . PACKAGEVERSION ( ). rpm . Package . PCH Microsoft Visual C++ . Microsoft Visual C++ . SCons PCH . : env['PCH'] = File('StdAfx.pch') env['PCH'] = env.PCH('pch.cc')[0] PCHCOM PCH . PCHCOMSTR . $PCHCOM ( ) . PCHPDBFLAGS /yD $PDB . PCHSTOP . Microsoft Visual C++ PCH . <<#pragma hrdstop>> : env['PCHSTOP'] = 'StdAfx.h' PDB PDB Microsoft Visual C++ . Microsoft Visual C++ . SCons PDB . : env['PDB'] = 'hello.pdb' Microsoft Visual C++ SCons PDB /Z7 . (-j) PDB . . /Zi . $CCPDBFLAGS PDB /Zi . PDFLATEX pdflatex. PDFLATEXCOM pdflatex . PDFLATEXCOMSTR pdflatex . $PDFLATEXCOM ( ) . env = Environment(PDFLATEX;COMSTR = "Building $TARGET from LaTeX input $SOURCES") PDFLATEXFLAGS pdflatex. PDFPREFIX PDF. PDFSUFFIX PDF. PDFTEX pdftex. PDFTEXCOM pdftex. PDFTEXCOMSTR pdftex . $PDFTEXCOM ( ) . env = Environment(PDFTEXCOMSTR = "Building $TARGET from TeX input $SOURCES") PDFTEXFLAGS pdftex. PKGCHK Solaris ( $PKGINFO) Sun PRO C++ . /usr/sbin/pgkchk . PKGINFO Solaris ( $PKGCHK) Sun PRO C++ . pkginfo . PLATFORM . SCons ( platform Environment ). env = Environment(tools=[]) if env['PLATFORM'] == 'cygwin': Tool('mingw')(env) else: Tool('msvc')(env) POAUTOINIT $POAUTOINIT True ( ) msginit PO msginit(1) . POInit POUpdate ( ) . POCREATE_ALIAS (alias) PO POInit (: 'po-create'). msginit POInit . POSUFFIX PO (: '.po'). msginit POInit . POTDOMAIN $POTDOMAIN POT POT $POTDOMAIN.pot . POTUpdate POInit POUpdate ( Translate) . ( $POTDOMAIN ) messages.pot POT . POTSUFFIX PO (: '.pot'). xgettext POTUpdate . POTUPDATE_ALIAS (phony target) PO POUpdate (: 'pot-update'). xgettext POTUpdate . POUPDATE_ALIAS (alias) PO POUpdate (: 'po-update'). msgmerge POUpdate . PRINT_CMD_LINE_FUNC . -q/--question -s/--silent . : s target source env. s target ( ) source ( ) env . . source target ( ). None s : def print_cmd_line(s, target, source, env): sys.stdout.write(s + "\n") source target : def print_cmd_line(s, target, source, env): sys.stdout.write( "Building %s -> %s...\n" % ( ' and '.join([str(x) for x in source]), ' and '.join([str(x) for x in target]), ) ) env = Environment(PRINT_CMD_LINE_FUNC=print_cmd_line) env.Program('foo', ['foo.c', 'bar.c']) : ... scons: Building targets ... Building bar.c -> bar.o... Building foo.c -> foo.o... Building foo.o and bar.o -> foo... scons: done building targets. . PROGEMITTER (emitter) Program . <> . PROGPREFIX . PROGSUFFIX . PSCOM TeX DVI PostScript . PSCOMSTR TeX DVI PostScript . $PSCOM ( ) . PSPREFIX PostScript . PSSUFFIX PostScript. RANLIB . RANLIBCOM . RANLIBCOMSTR . $RANLIBCOM ( ) . env = Environment(RANLIBCOMSTR = "Indexing $TARGET") RANLIBFLAGS . RC Microsoft Visual C++. RCCOM Microsoft Visual C++ . RCCOMSTR Microsoft Visual C++ . $RCCOM ( ) . RCFLAGS RES. RCINCFLAGS . $RCINCFLAGS $RCINCPREFIX $RCINCSUFFIX $CPPPATH . RCINCPREFIX () include . $RCINCFLAGS $CPPPATH . RCINCSUFFIX include . $RCINCFLAGS $CPPPATH . RDirs Dir . REGSVR Windows DLL SharedLibrary register=True . REGSVRCOM Windows DLL SharedLibrary register=True . REGSVRCOMSTR DLL . $REGSVRCOM ( ) . REGSVRFLAGS DLL Windows DLL . /s . RMIC stub Java RMI. RMICCOM stub skeleton Java RMI . $RMICFLAGS . RMICCOMSTR stub skeleton Java RMI . $RMICCOM ( ) . env = Environment( RMICCOMSTR="Generating stub/skeleton class files $TARGETS from $SOURCES" ) RMICFLAGS stub Java RMI . RPATH . GNU (gnulink) IRIX (sgilink) Sun (sunlink) . . RPATH scons : . _RPATH rpath . $_RPATH $RPATHPREFIX $RPATHSUFFIX $RPATH . RPATHPREFIX . $RPATH $_RPATH . RPATHSUFFIX . $RPATH $_RPATH . RPCGEN RPC. RPCGENCLIENTFLAGS stub RPC . $RPCGENFLAGS . RPCGENFLAGS RPC . RPCGENHEADERFLAGS RPC . $RPCGENFLAGS . RPCGENSERVICEFLAGS stub RPC . $RPCGENFLAGS . RPCGENXDRFLAGS XDR RPC . $RPCGENFLAGS . SCANNERS . Builder . "Builder Objects" "Scanner Objects" . SCONS_HOME () SCons . $MSVSSCONS C++ . SHCC C . $CC . SHCCCOM C . $SHCFLAGS $SHCCFLAGS $CPPFLAGS . $CCCOM . SHCCCOMSTR C . $SHCCCOM ( ) . $CCCOMSTR . env = Environment(SHCCCOMSTR = "Compiling shared object $TARGET") SHCCFLAGS C C++ . $CCFLAGS . SHCFLAGS C ( C++) . $CFLAGS . SHCXX C++ . $CXX . SHCXXCOM C++ . $SHCXXFLAGS $CPPFLAGS . $CXXCOM . SHCXXCOMSTR C++ . $SHCXXCOM ( ) . $CXXCOMSTR . env = Environment(SHCXXCOMSTR = "Compiling shared object $TARGET") SHCXXFLAGS C++ . $CXXFLAGS . SHDC D . $DC . SHDCOM . $DCOM . SHDCOMSTR D () . $SHDCOM ( ) . $DCOMSTR . SHDLIBVERSIONFLAGS SharedLibrary $SHDLINKCOM . $SHLIBVERSION . SHDLINK dlang . $DLINK . SHDLINKCOM . $DLINKCOM . SHDLINKFLAGS D . $DLINKFLAGS . SHELL $SPAWN . $SPAWN . SHELL_ENV_GENERATORS (hook) $SPAWN . . ( ) . ($ENV ) . . $SHELL_ENV_GENERATORS : env target source shell_env $SHELL_ENV_GENERATORS ( env['ENV'] ). : def custom_shell_env(env, target, source, shell_env): """customize shell_env if desired""" if str(target[0]) == 'special_target': shell_env['SPECIAL_VAR'] = env.subst('SOME_VAR', target=target, source=source) return shell_env env["SHELL_ENV_GENERATORS"] = [custom_shell_env] 4.4 SHF03 Fortran 03 . $SHFORTRAN Fortran Fortran . $SHF03 Fortran 03 . SHF03COM Fortran 03 . $SHF03COM Fortran 03 . $SHFORTRANCOM Fortran . SHF03COMSTR Fortran 03 . $SHF03COM $SHFORTRANCOM ( ) . SHF03FLAGS Fortran 03 . $SHF03FLAGS Fortran 03 . $FORTRANCOMMONFLAGS Fortran Fortran . SHF03PPCOM Fortran 03 C . $SHF03FLAGS $CPPFLAGS . $SHF03PPCOM C Fortran 03 . $SHFORTRANPPCOM C Fortran . SHF03PPCOMSTR Fortran 03 C . $SHF03PPCOM $SHFORTRANPPCOM ( ) . SHF08 Fortran 08 . $SHFORTRAN Fortran Fortran . $SHF08 Fortran 08 . SHF08COM Fortran 08 . $SHF08COM Fortran 08 . $SHFORTRANCOM Fortran . SHF08COMSTR Fortran 08 . $SHF08COM $SHFORTRANCOM ( ) . SHF08FLAGS Fortran 08 . $SHF08FLAGS Fortran 08 . $FORTRANCOMMONFLAGS Fortran Fortran . SHF08PPCOM Fortran 08 C . $SHF08FLAGS $CPPFLAGS . $SHF08PPCOM C Fortran 08 . $SHFORTRANPPCOM C Fortran . SHF08PPCOMSTR Fortran 08 C . $SHF08PPCOM $SHFORTRANPPCOM ( ) . SHF77 Fortran 77 . $SHFORTRAN Fortran Fortran . $SHF77 Fortran 77 . SHF77COM Fortran 77 . $SHF77COM Fortran 77 . $SHFORTRANCOM Fortran . SHF77COMSTR Fortran 77 . $SHF77COM $SHFORTRANCOM ( ) . SHF77FLAGS Fortran 77 . $SHF77FLAGS Fortran 77 . $FORTRANCOMMONFLAGS Fortran Fortran . SHF77PPCOM Fortran 77 C . $SHF77FLAGS $CPPFLAGS . $SHF77PPCOM C Fortran 77 . $SHFORTRANPPCOM C Fortran . SHF77PPCOMSTR Fortran 77 C . $SHF77PPCOM $SHFORTRANPPCOM ( ) . SHF90 Fortran 90 . $SHFORTRAN Fortran Fortran . $SHF90 Fortran 90 . SHF90COM Fortran 90 . $SHF90COM Fortran 90 . $SHFORTRANCOM Fortran . SHF90COMSTR Fortran 90 . $SHF90COM $SHFORTRANCOM ( ) . SHF90FLAGS Fortran 90 . $SHF90FLAGS Fortran 90 . $FORTRANCOMMONFLAGS Fortran Fortran . SHF90PPCOM Fortran 90 C . $SHF90FLAGS $CPPFLAGS . $SHF90PPCOM C Fortran 90 . $SHFORTRANPPCOM C Fortran . SHF90PPCOMSTR Fortran 90 C . $SHF90PPCOM $SHFORTRANPPCOM ( ) . SHF95 Fortran 95 . $SHFORTRAN Fortran Fortran . $SHF95 Fortran 95 . SHF95COM Fortran 95 . $SHF95COM Fortran 95 . $SHFORTRANCOM Fortran . SHF95COMSTR Fortran 95 . $SHF95COM $SHFORTRANCOM ( ) . SHF95FLAGS Fortran 95 . $SHF95FLAGS Fortran 95 . $FORTRANCOMMONFLAGS Fortran Fortran . SHF95PPCOM Fortran 95 C . $SHF95FLAGS $CPPFLAGS . $SHF95PPCOM C Fortran 95 . $SHFORTRANPPCOM C Fortran . SHF95PPCOMSTR Fortran 95 C . $SHF95PPCOM $SHFORTRANPPCOM ( ) . SHFORTRAN Fortran . SHFORTRANCOM Fortran . $SHFORTRANFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS . : $FORTRANCOM. SHFORTRANCOMSTR Fortran . $SHFORTRANCOM ( ) . SHFORTRANFLAGS Fortran . SHFORTRANPPCOM Fortran C . $SHFORTRANFLAGS $CPPFLAGS $_CPPDEFFLAGS $_FORTRANMODFLAG $_FORTRANINCFLAGS . : $SHFORTRANCOM. SHFORTRANPPCOMSTR Fortran C . $SHFORTRANPPCOM ( ) . SHLIBEMITTER emitter SharedLibrary . "Builder Objects" emitter . SHLIBNOVERSIONSYMLINKS SharedLibrary . SHLIBPREFIX . _SHLIBSONAME $SONAME $TARGET $SHLIBVERSION $SHLIBSUFFIX . SONAME ( gnulink) SharedLibrary . SHLIBSUFFIX . SHLIBVERSION SharedLibrary . $_SHLIBVERSIONFLAGS $SHLINKCOM . $SHLIBVERSION - "\w+[\.\w+]*" . $SHLIBVERSION '1' '1.2.3' '1.2.gitaa412c8b' . _SHLIBVERSIONFLAGS SharedLibrary ( $SHLIBVERSION ) $SHLINKCOM . $_SHLIBVERSIONFLAGS $SHLIBVERSIONFLAGS ( -Wl,-soname=$_SHLIBSONAME) . "" ( ) . SHLIBVERSIONFLAGS SharedLibrary $SHLINKCOM . $SHLIBVERSION . SHLINK . $LINK . POSIX ( link ) "" . $SHCXX C++ smartlink . SHLINKCOM . $LINKCOM . SHLINKCOMSTR . $SHLINKCOM ( ) . $LINKCOMSTR . env = Environment(SHLINKCOMSTR = "Linking shared $TARGET") SHLINKFLAGS . -l ( ) $LIBS -L ( ) scons $LIBPATH . $_LIBFLAGS $_LIBDIRFLAGS . $LINKFLAGS . SHOBJPREFIX (shared object) . SHOBJSUFFIX . SONAME . . $SONAME $SOVERSION (construction environment) (override) . # Will cause libtest.so.2 to exist and be a symlink to libtest.so.0.1.2 env.SharedLibrary('test', 'test.c', SHLIBVERSION='0.1.2', SONAME='libtest.so.2') . SOURCE . ( << >> ). SOURCE_URL (URL) . Source: Ipkg RPM . Package . SOURCES . ( << >> ). SOVERSION $SONAME. (test ). $SONAME $SOVERSION . # SONAME will be libtest.so.2, and will be a symlink to libtest.so.0.1.2 env.SharedLibrary('test', 'test.c', SHLIBVERSION='0.1.2', SOVERSION='2') . SPAWN . : def spawn(shell, escape, cmd, args, env): shell escape cmd args env . STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME (true) SCons . SUBST_DICT Substfile Textfile . dict() (tuples) . SUBSTFILEPREFIX Substfile . SUBSTFILESUFFIX Substfile . SUMMARY . Summary: Ipkg RPM Description: MSI . Package . SWIG SWIG . SWIGCFILESUFFIX C SWIG . '_wrap$CFILESUFFIX' - _wrap C $CFILESUFFIX. -c++ $SWIGFLAGS . SWIGCOM SWIG . SWIGCOMSTR SWIG . $SWIGCOM ( ) . SWIGCXXFILESUFFIX ++C SWIG . '_wrap$CXXFILESUFFIX' - _wrap ++C $CXXFILESUFFIX. -c++ $SWIGFLAGS . SWIGDIRECTORSUFFIX (header) ++C SWIG . ++C 'directors' SWIG . _wrap.h . SWIGFLAGS SWIG. (-python -perl5 -tcl ) SWIG -c++ ++C C . _SWIGINCFLAGS SWIG (included) . $_SWIGINCFLAGS $SWIGINCPREFIX $SWIGINCSUFFIX $SWIGPATH . SWIGINCPREFIX include SWIG. $_SWIGINCFLAGS $SWIGPATH . SWIGINCSUFFIX include SWIG. $_SWIGINCFLAGS $SWIGPATH . SWIGOUTDIR SWIG . SCons SWIG swig -outdir . SWIGPATH SWIG include . SWIG SCons include . . include $SWIGFLAGS . : $SWIGPATH SConscript . scons (#) : env = Environment(SWIGPATH='#/include') Dir() : include = Dir('include') env = Environment(SWIGPATH=include) $_SWIGINCFLAGS $SWIGINCPREFIX $SWIGINCSUFFIX $SWIGPATH . SWIGPATH $_SWIGINCFLAGS : env = Environment(SWIGCOM="my_swig -o $TARGET $_SWIGINCFLAGS $SOURCES") SWIGVERSION SWIG. TAR tar. TARCOM tar . TARCOMSTR tar . $TARCOM ( ) . env = Environment(TARCOMSTR = "Archiving $TARGET") TARFLAGS tar. TARGET . ( << >> ). TARGET_ARCH . Environment . win32 Microsoft Visual C++ msvc $HOST_ARCH $TARGET_ARCH . $HOST_ARCH . . . $MSVC_VERSION . win32/msvc x86 arm i386 amd64 arm64 x86_64 ia64 () . TARGET_ARCH='x86_64' . Visual Studio / MSVC . . $TARGET_ARCH . TARGET_OS . Environment ;. $TARGET_OS SCons . TARGETS . ( << >> ). TARSUFFIX tar. TEMPFILE ( ) . . / . $TEMPFILE . : env["TEMPFILE"] = TempFileMunge env["LINKCOM"] = "${TEMPFILE('$LINK $TARGET $SOURCES', '$LINKCOMSTR')}" SCons $TEMPFILE TempFileMunge ( ) ( response file command file ) . tempfile $MAXLINELENGTH $TEMPFILEPREFIX $TEMPFILESUFFIX $TEMPFILEARGJOIN $TEMPFILEDIR $TEMPFILEARGESCFUNC. () *COM $TEMPFILE . TEMPFILEARGESCFUNC (escape) SCons.Subst.quote_spaces . ( ) $TEMPFILEARGESCFUNC . . : import sys import re from SCons.Subst import quote_spaces WINPATHSEP_RE = re.compile(r"\\([^\"'\\]|$)") def tempfile_arg_esc_func(arg): arg = quote_spaces(arg) if sys.platform != "win32": return arg # GCC requires double Windows slashes, let's use UNIX separator return WINPATHSEP_RE.sub(r"/\1", arg) env["TEMPFILEARGESCFUNC"] = tempfile_arg_esc_func TEMPFILEARGJOIN $TEMPFILE $MAXLINELENGTH . (space) . MSVC MSLINK os.linesep . subst . TEMPFILEDIR . tempfile Python TMPDIR TEMP TMP . $TEMPFILEDIR . . 7-bit-ASCII . : $TEMPFILEENCODING. TEMPFILEENCODING ( "response file") $TEMPFILE Python UTF-8 . ( 7-bit ASCII ) . : $TEMPFILEDIR. 4.10.0 TEMPFILEPREFIX $MAXLINELENGTH . . '@' Microsoft Visual C++ GNU . '-@' diab '-via' ARM. TEMPFILESUFFIX $MAXLINELENGTH . ('.') . .lnk . TEX TeX. TEXCOM TeX. TEXCOMSTR TeX . $TEXCOM ( ) . env = Environment(TEXCOMSTR = "Building $TARGET from TeX input $SOURCES") TEXFLAGS TeX. TEXINPUTS LaTeX include . LaTeX \include \import . TEXTFILEPREFIX Textfile . TEXTFILESUFFIX Textfile .txt . TOOLS Tool (construction environment) . ( ) . . UNCHANGED_SOURCES (construction environment) . ( "Variable Substitution" ). UNCHANGED_TARGETS . ( <> ). VENDOR . Vendor: RPM Manufacturer: MSI . Package . VERSION . Package . VSWHERE vswhere.exe . vswhere.exe 2017 Microsoft Visual Studio Build Tools . 2017 . SCons . $VSWHERE vswhere.exe SCons . SCons ($VSWHERE ): %ProgramFiles(x86)%\Microsoft Visual Studio\Installer %ProgramFiles%\Microsoft Visual Studio\Installer %ChocolateyInstall%\bin %LOCALAPPDATA%\Microsoft\WinGet\Links %USERPROFILE%\scoop\shims %SCOOP%\shims $VSWHERE Microsoft Visual C++ . Environment tools Microsoft Visual C++ - "defaults" (msvc mslink masm midl msvs) . . : # VSWHERE set as Environment is created env = Environment(VSWHERE='c:/my/path/to/vswhere') # Initialization deferred with empty tools, triggered manually env = Environment(tools=[]) env['VSWHERE'] = r'c:/my/vswhere/install/location/vswhere.exe' env.Tool('msvc') env.Tool('mslink') env.Tool('msvs') WINDOWS_EMBED_MANIFEST True ( ${TARGET}.manifest) DLL . $MT $MTEXECOM $MTSHLIBCOM . $WINDOWS_INSERT_MANIFEST . WINDOWS_INSERT_DEF true (module-definition) ( .dll) . $WINDOWSDEFSUFFIX $WINDOWSDEFPREFIX . . . WINDOWS_INSERT_MANIFEST true scons Microsoft Visual C++ 8.0 SCons . $WINDOWSPROGMANIFESTSUFFIX $WINDOWSPROGMANIFESTPREFIX . $WINDOWSSHLIBMANIFESTSUFFIX $WINDOWSSHLIBMANIFESTPREFIX . $WINDOWS_EMBED_MANIFEST . WINDOWSDEFPREFIX (module-definition) . . WINDOWSDEFSUFFIX (module-definition) . .def . WINDOWSEXPPREFIX (exports) . . WINDOWSEXPSUFFIX (exports) . .exp . WINDOWSPROGMANIFESTPREFIX Microsoft Visual C++. . WINDOWSPROGMANIFESTSUFFIX Microsoft Visual C++. .manifest . WINDOWSSHLIBMANIFESTPREFIX Microsoft Visual C++. . WINDOWSSHLIBMANIFESTSUFFIX Microsoft Visual C++. .manifest . X_IPK_DEPENDS Depends: Ipkg . Package . X_IPK_DESCRIPTION Description: Ipkg . "$SUMMARY\n$DESCRIPTION" . X_IPK_MAINTAINER Maintainer: Ipkg . X_IPK_PRIORITY Priority: Ipkg . X_IPK_SECTION Section: Ipkg . X_MSI_LANGUAGE Language: MSI . Package . X_MSI_LICENSE_TEXT RTF. (carriage return) RTF \\par . Package . X_MSI_UPGRADE_CODE TODO X_RPM_AUTOREQPROV AutoReqProv: .spec RPM . Package . X_RPM_BUILD X_RPM_BUILDREQUIRES BuildRequires: .spec RPM . rpm (build) . X_RPM_BUILDROOT X_RPM_CLEAN X_RPM_CONFLICTS Conflicts: .spec RPM . X_RPM_DEFATTR RPM . "(-,root,root)" . X_RPM_DISTRIBUTION Distribution: .spec RPM . X_RPM_EPOCH Epoch: .spec RPM . X_RPM_EXCLUDEARCH ExcludeArch: .spec RPM . X_RPM_EXLUSIVEARCH ExclusiveArch: .spec RPM . X_RPM_EXTRADEFS .spec RPM . (carriage return) . RPM SCons . SCons '%global debug_package %{nil}' . None . 3.1. env.Package( NAME="foo", ... X_RPM_EXTRADEFS=[ "%define _unpackaged_files_terminate_build 0" "%define _missing_doc_files_terminate_build 0" ], ... ) X_RPM_GROUP Group: .spec RPM . X_RPM_GROUP_lang Group(lang): .spec RPM . lang . X_RPM_ICON Icon: .spec RPM . X_RPM_INSTALL X_RPM_PACKAGER Packager: .spec RPM . X_RPM_POSTINSTALL %post: .spec RPM . X_RPM_POSTUNINSTALL %postun: .spec RPM . X_RPM_PREFIX Prefix: .spec RPM . X_RPM_PREINSTALL %pre: .spec RPM . X_RPM_PREP . X_RPM_PREUNINSTALL %preun: .spec RPM . X_RPM_PROVIDES Provides: .spec RPM . X_RPM_REQUIRES Requires: .spec RPM . X_RPM_SERIAL Serial: .spec RPM . X_RPM_URL Url: .spec RPM . XGETTEXT xgettext(1) ( Detect()). xgettext POTUpdate . XGETTEXTCOM xgettext. xgettext POTUpdate . XGETTEXTCOMSTR xgettext(1) (: '' << $XGETTEXTCOM>>). xgettext POTUpdate . _XGETTEXTDOMAIN <<>> . xgettext (: '${TARGET.filebase}'). XGETTEXTFLAGS xgettext(1). xgettext POTUpdate . XGETTEXTFROM xgettext(1). Autotools POTFILES.in XGETTEXTFROM="POTFILES.in" . $XGETTEXTFROM POTFILES.in GNU . xgettext POTUpdate . _XGETTEXTFROMFLAGS <<>> . -D $XGETTEXTPATH . XGETTEXTFROMPREFIX $XGETTEXTFROM xgettext(1) (: '-f'). XGETTEXTFROMSUFFIX (: '') XGETTEXTPATH xgettext(1) (: []). $XGETTEXTFROM . xgettext POTUpdate . _XGETTEXTPATHFLAGS <<>> . -f $XGETTEXTFROM . XGETTEXTPATHPREFIX xgettext(1) (: '-D'). XGETTEXTPATHSUFFIX (: '') YACC . YACC_GRAPH_FILE () . --graph= . --graph= $YACCFLAGS . 4.4.0. YACC_GRAPH_FILE_SUFFIX $YACCVCGFILESUFFIX . -g ( --graph= ) $YACCFLAGS . SCons . yacc . . 4.6.0. YACC_HEADER_FILE . --header= . --header= $YACCFLAGS . 4.4.0. YACCCOM . YACCCOMSTR . $YACCCOM ( ) . env = Environment(YACCCOMSTR="Yacc'ing $TARGET from $SOURCES") YACCFLAGS . yacc . -d $YACCFLAGS scons $YACCHFILESUFFIX yacc .y $YACCHXXFILESUFFIX yacc .yy . . bison ( win_bison) . Berkeley yacc (byacc) y.tab.h - -d $YACC_HEADER_FILE . -g scons $YACCVCGFILESUFFIX . -v scons .output . GNU bison : --header ( --defines) -d --graph -g . option=argument -d -g . --header= --graph= SCons $YACCFLAGS . $YACC_HEADER_FILE $YACC_GRAPH_FILE ( 4.4.0). YACCHFILESUFFIX C -d ( --header ) $YACCFLAGS . SCons . . .h . YACCHXXFILESUFFIX ++C -d ( --header ) $YACCFLAGS . SCons . . .hpp . YACCVCGFILESUFFIX . $YACC_GRAPH_FILE_SUFFIX . $YACC_GRAPH_FILE_SUFFIX . .gv . 4.6.0: . .vcg ( .vcg bison 2.4 2006 ). ZIP zip. ZIP_OVERRIDE_TIMESTAMP Zip . (tuple) : (1980 =<) ( ) ( ) ( ) ( ) ( ). ZIPCOM zip Python zip . ZIPCOMPRESSION compression zipfile Python Python zip . zipfile.ZIP_DEFLATED zip . zipfile . ZIPCOMSTR zip . $ZIPCOM ( Python) . env = Environment(ZIPCOMSTR = "Zipping $TARGET") ZIPFLAGS zip. ZIPROOT zip ( ). zip . . : env = Environment() env.Zip('foo.zip', 'subdir1/subdir2/file1', ZIPROOT='subdir1') zip foo.zip subdir2/file1 subdir1/subdir2/file1 . ZIPSUFFIX zip. (Configure Contexts) SCons ( GNU Autoconf SCons) C . . (portable) . (configure context) . C C++ (include) . SCons ( Autoconf) (cache) . --config (override) . Configure(env, [custom_tests, conf_dir, log_file, config_h, clean, help]), env.Configure([custom_tests, conf_dir, log_file, config_h, clean, help]) (configure context) . (construction environment) ( context.env ) . . env . custom_tests ( ). None . conf_dir . . "#/.sconf_temp" . log_file . "#/config.log" . (variant directories) . config_h C (include) . #define HAVE_GETADDRINFO 1, #define HAVE_INTTYPES_H 1 . None . config.h . config_h Configure SCons . SCons . scons . clean help -c/--clean -H/-h/--help . . clean=False help=False ( ) . 4.0: . context.Finish() . Configure . - . . . Configure: env = Environment() conf = Configure(env) if not conf.CheckCHeader("math.h"): print("We really need math.h!") Exit(1) if conf.CheckLibWithHeader("qt", "qapp.h", "c++", call="QApplication qapp(0,0);"): # do stuff for qt - usage, e.g. conf.env.Append(CPPDEFINES="WITH_QT") env = conf.Finish() . language C C++ . C "C" "c" C++ "CXX", "cxx", "C++" "c++" . language "C" . context.CheckHeader(header, [include_quotes, language]) header . (stub) language . header #include . include_quotes - . ("") (<>) . . (comment) . context.CheckCHeader(header, [include_quotes]) header C . (wrapper) CheckHeader - . context.CheckCXXHeader(header, [include_quotes]) header C++ . CheckHeader - . context.CheckFunc(function_name, [header, language, funcargs]) function_name context language - $CFLAGS $CPPFLAGS $LIBS (construction variables) . header . ( function_name): #ifdef __cplusplus extern "C" #endif char function_name(void); header not () function_name should () . funcargs . . C/C++ . . (configure header) (comment) . 4.7.0: funcargs . context.CheckLib([library, symbol, header, language, extra_libs=None, autoadd=True, append=True, unique=False]) library ( CheckLibWithHeader). (stub) library language . symbol . header language . symbol (old-style) ( char sin(); double sin(double x);). C23 . . extra_libs ( ). autoadd (true ) $LIBS context . append (true ) . unique (true) $LIBS context . False . library None ( ) . symbol ( ) $LIBS ( ). symbol None CheckLib library . None library symbol - . . 4.5.0: append unique . 4.9.0: extra_libs . context.CheckLibWithHeader([library, header, language, extra_libs=None, call=None, autoadd=True, append=True, unique=False]) library library ( CheckLib). . library ( None ) header . header #include . . . call . language . library . extra_libs ( ). autoadd (true ) $LIBS context . append (true ) . unique (true) $LIBS context . False . . 4.5.0: append unique . 4.9.0: extra_libs . context.CheckType(type_name, [includes, language]) type_name typedef . includes #include (stub) . . (configure header) . : sconf.CheckType('foo_type', '#include "my_types.h"', 'C++') context.CheckTypeSize(type_name, [header, language, expect]) type_name typedef ( ) . header - . . expect ( ) . : CheckTypeSize('short', expect=2) 2 short . context.CheckCC() C ( $CC ) . : SCons . . Object C . context.CheckCXX() ++C ( $CXX ) . : SCons . . Object ++C . context.CheckSHCC() C (shared-object) ( $SHCC ) . : SCons . . SharedObject C . /dll . context.CheckSHCXX() ++C (shared-object) ( $SHCXX ) . : SCons . . SharedObject ++C . /dll . context.CheckProg(prog_name) prog_name SCons . (context.env['ENV']['PATH']). None . context.CheckDeclaration(symbol, [includes, language]) symbol . includes #include . . context.CheckMember(aggregate_member, [header, language]) struct class C/C++ . aggregate_member struct/class . header #include . : sconf.CheckMember('struct tm.tm_sec', '#include ') . 4.4.0. context.Define(symbol, [value, comment]) . name . value . value '"string"' comment ( ). AC_DEFINE Autoconf . : env = Environment() conf = Configure(env) # Puts the following line in the config header file: # #define A_SYMBOL conf.Define("A_SYMBOL") # Puts the following line in the config header file: # #define A_SYMBOL 1 conf.Define("A_SYMBOL", 1) : env = Environment() conf = Configure(env) # Puts the following line in the config header file: # #define A_SYMBOL YA conf.Define("A_SYMBOL", "YA") # Puts the following line in the config header file: # #define A_SYMBOL "YA" conf.Define("A_SYMBOL", '"YA"') : env = Environment() conf = Configure(env) # Puts the following lines in the config header file: # /* Set to 1 if you have a symbol */ # #define A_SYMBOL 1 conf.Define("A_SYMBOL", 1, "Set to 1 if you have a symbol") . Configure custom_tests . (callables) ( Python __call__ ) . CheckContext . CheckContext (configure context) ( chk_ctx.sconf). CheckContext : chk_ctx.Message(text) text . : Checking for library X.... . chk_ctx.Result(res) . res (true) res yes (false) no . res . . chk_ctx.TryCompile(text, extension='') text extension ( '.c') Object (object file) . . chk_ctx.TryLink(text, extension='') text extension ( '.c') Program . . chk_ctx.TryRun(text, extension='') text extension ( '.c') Program . . ( 0 ) (True, outputStr) outputStr . ( ) (False, '') . chk_ctx.TryAction(action, [text, extension='']) action ( text extension) . action Action Object . (True, outputStr) outputStr . (False, '') . chk_ctx.TryBuild(builder, [text, extension='']) . Builder builder text extension . chk_ctx.lastTarget . : def CheckQt(chk_ctx, qtdir): chk_ctx.Message('Checking for qt ...') lastLIBS = chk_ctx.env['LIBS'] lastLIBPATH = chk_ctx.env['LIBPATH'] lastCPPPATH = chk_ctx.env['CPPPATH'] chk_ctx.env.Append(LIBS='qt', LIBPATH=qtdir + '/lib', CPPPATH=qtdir + '/include') ret = chk_ctx.TryLink( """\ #include int main(int argc, char **argv) { QApplication qapp(argc, argv); return 0; } """ ) if not ret: chkctx.env.Replace(LIBS=lastLIBS, LIBPATH=lastLIBPATH, CPPPATH=lastCPPPATH) chkctx.Result(ret) return ret env = Environment() conf = Configure(env, custom_tests={'CheckQt': CheckQt}) if not conf.CheckQt('/usr/lib/qt'): print('We really need qt!') Exit(1) env = conf.Finish() (Command-Line Construction Variables) SCons . (override) . / . SCons Variables . : scons VARIABLE=foo OTHERVAR=bar ARGUMENTS ARGLIST . Variables . (: AddOption). Variables SConscript . . ( ) SCons ( SCons ). Variables : Variables([files, [args]]) files Update Python . Python . Save . files files None . args None . files . C : CC = 'my_cc' CC = os.environ.get('CC') args . - args files ( ) . args files . ARGUMENTS . ARGUMENTS () . . : vars = Variables('custom.py') vars = Variables('overrides.py', ARGUMENTS) vars = Variables(None, {FOO:'expansion', BAR:7}) vars = Variables(args={FOO:'expansion', BAR:7}) Variables : vars = Variables(files=None, args=ARGUMENTS) Variables Add AddVariables . . Update . unknown Variables . UnknownVariables . None . defaulted Variables . Update . (construction variables) ( "Construction Variables" ) . Variables (validator) ( EnumVariable ListVariable ). Variables : vars.Add(key, [help, default, validator, converter, subst]) Variables. key . key . help ( ). default . default None ( ) . converter . validator . Update . : key value env. ( ) . converter . . validator ( ) . value env . ValueError . subst . True . ( $VAR) . key Add key help default validator converter subst . BoolVariable EnumVariable ListVariable PackageVariable PathVariable . : vars.Add('CC', help='The C compiler') def valid_color(key, val, env): if not val in ['red', 'blue', 'yellow']: raise Exception("Invalid color value '%s'" % val) vars.Add('COLOR', validator=valid_color) 4.8.0: subst . vars.AddVariables(args) Variables Add. args Add " " ( / ) . opt.AddVariables( ("debug", "", 0), ("CC", "The C compiler"), ("VALIDATE", "An option for testing validation", "notset", validator, None), ) vars.FormatVariableHelpText(env, opt, help, default, actual, aliases) opt . aliases . env (construction environment) (env FormatVariableHelpText ) var help Variables default Variables actual env ( default ) aliases . FormatVariableHelpText GenerateHelpText . . : def my_format(env, var, help, default, actual): fmt = "\n%s: default=%s actual=%s (%s)\n" return fmt % (var, default, actual, help) vars.FormatVariableHelpText = my_format GenerateHelpText . vars.GenerateHelpText(env, [sort]) Variables . Help . env . sort (callable) . . sort (true) . False () . Help(vars.GenerateHelpText(env)) def cmp(a, b): return (a > b) - (a < b) Help(vars.GenerateHelpText(env, sort=cmp)) vars.Save(filename, env) filename . Variables . () . . Python . Variables . env = Environment() vars = Variables(['variables.cache', 'custom.py']) vars.Add(...) vars.Update(env) vars.Save('variables.cache', env) vars.UnknownVariables() Variables files / args . Update . env = Environment(variables=vars) for key, value in vars.UnknownVariables(): print("unknown variable: %s=%s" % (key, value)) vars.Update(env, [args]) Variables env . Variables UnknownVariables . args Variables . Update Variables Environment : env = Environment(..., variables=vars) Variables . Update . vars.defaulted (construction environment) - . vars.unknown . UnknownVariables . 4.9.0: defaulted. SCons (factory functions) (tuple) Add AddVariables . BoolVariable(key, help, default) key . default help . y yes t true 1 on all true n no f false 0 off none false . EnumVariable(key, help, default, allowed_values, [map, ignorecase]) key (<<>>) . default help . allowed_values map allowed_values . ignorecase 0 () . ignorecase 1 . ignorecase 2 . ListVariable(key, help, default, names, [map, validator]) key . default help . names all none . . default Python . map names . ( map ). validator (callback) Add . . 4.8.0: validator. PackageVariable(key, help, default) key . BoolVariable . default help . ( ) 1 yes true on enable search << >> default . True . ( ) 0 no false off disable << >> default . False . << >> . default . . . default True . PathVariable(key, help, default, [validator]) key . default help . validator (callback) . SCons : PathVariable.PathExists ( validator ). PathVariable.PathIsFile . PathVariable.PathIsDir . PathVariable.PathIsDirCreate . PathVariable.PathAccept . validator : key val env (construction environment) (exception) . AddVariables : vars.AddVariables( BoolVariable( "warnings", help="compilation with -Wall and similar", default=True, ), EnumVariable( "debug", help="debug output and symbols", default="no", allowed_values=("yes", "no", "full"), map={}, ignorecase=0, # case-sensitive ), ListVariable( "shared", help="libraries to build as shared libraries", default="all", names=list_of_libs, ), PackageVariable( "x11", help="use X11 installed here (yes = search some places)", default="yes", ), PathVariable( "qtdir", help="where the root of Qt is installed", default=qtdir ), PathVariable( "foopath", help="where the foo library is installed", default=foopath, validator=PathVariable.PathIsDir, ), ) (Node Objects) SCons (Nodes) . : (File Nodes) (Directory Nodes) (Value Nodes) (Alias Nodes). . : File Dir Value Alias. (Filesystem Nodes) / File Dir . . Builder SCons . (Builders) () . SConscript Builder . Node : node.path . . variant_dir . node.abspath . node.relpath . node.srcnode() srcnode . : # . Dir('.').path # Dir('.').abspath # Dir('.').relpath # '.' . Dir('#.').path # . File('foo.c').srcnode().path # File : foo = env.Program('foo.c') print("foo will be built in", foo[0].path) . . Entry . : node.Dir(name) name node . node.File(name) name node . node.Entry(name) name node . : node.Dir(name) name node . node.File(name) name node . node.Entry(name) name node . : # Node incl = Dir('include') f = incl.File('header.h') # Node dist = Dir('project-3.2.1') src = dist.Dir('src') # Node cfile = File('sample.c') hfile = cfile.File('sample.h') # docs = Dir('docs') html = docs.Dir('html') index = html.File('index.html') css = index.File('app.css') Value Alias SCons Node (filesystem) . Node . Alias Alias Node . (Aliases) - (sources) . alias . alias Action alias . Alias alias . alias Node (resolve) alias Node alias . Alias . alias alias alias . Value Value Node . Value Node (out-of-date) Action . (timestamp) (run-time) . Value Node (target) builder . SCONS (EXTENDING SCONS) SCons SCons . (callable objects) . Builders Scanners Tools . Builder Objects Scanner Objects . SCons Actions Action Objects ( Builders AddPostAction AddPreAction Alias Actions ). Action Objects . Tool Tool Modules . (Builder Objects) scons Builder construction environment ( ) . Builder . scons Builder Program Object Library construction variables ( ) ($CC $LINK ) . builder . Builder construction variables . Builder Builder . builder $BUILDERS construction environment ( ). SCons builder . Builder : action . action ( ) ( ) Python Action ( Action Objects ) . action : source target env. source target env construction environment (context) . action generator Builder . prefix . prefix ( ) ( construction environment ) ( ) . () () . None . b = Builder("build_it < $SOURCE > $TARGET", prefix="file-") def gen_prefix(env, sources): return "file-" + env['PLATFORM'] + '-' b = Builder("build_it < $SOURCE > $TARGET", prefix=gen_prefix) b = Builder( "build_it < $SOURCE > $TARGET", suffix={None: "file-", "$SRC_SFX_A": gen_prefix}, ) suffix . prefix . '.' scons '.' . '.' . b = Builder("build_it < $SOURCE > $TARGET", suffix="-file") def gen_suffix(env, sources): return "." + env['PLATFORM'] + "-file" b = Builder("build_it < $SOURCE > $TARGET", suffix=gen_suffix) b = Builder( "build_it < $SOURCE > $TARGET", suffix={None: ".sfx1", "$SRC_SFX_A": gen_suffix}, ) ensure_suffix (true) suffix . suffix . ( false ) . b1 = Builder("build_it < $SOURCE > $TARGET", suffix=".out") b2 = Builder( "build_it < $SOURCE > $TARGET", suffix=".out", ensure_suffix=True ) env = Environment() env['BUILDERS']['B1'] = b1 env['BUILDERS']['B2'] = b2 # Builds "foo.txt" because ensure_suffix is not set. env.B1('foo.txt', 'foo.in') # Builds "bar.txt.out" because ensure_suffix is set. env.B2('bar.txt', 'bar.in') src_suffix . src_suffix . target_scanner Scanner . Scanner construction environment ( source_scanner ). Scanner "Scanner Objects" . source_scanner Scanner . #include . DirScanner Builder scons Builder . Scanner "Scanner Objects" . target_factory (factory function) Builder SCons . SCons ( File ). target_factory Dir Builder Entry Builder . : def my_mkdir(target, source, env): # target[0] will be a Dir node for 'new_directory' MakeDirectoryBuilder = Builder(action=my_mkdir, target_factory=Dir) env = Environment() env.Append(BUILDERS={'MakeDirectory': MakeDirectoryBuilder}) env.MakeDirectory('new_directory', []) Builder MakeDirectory builder . SCons builder (circular dependency) . source_factory Builder SCons . SCons ( File ). source_factory Dir Builder Entry Builder ( ) . : def collect(target, source, env): # target[0] will default to a File node for 'archive' (no target_factory) # source[0] will be a Dir node for 'directory_name' CollectBuilder = Builder(action=collect, source_factory=Dir) env = Environment() env.Append(BUILDERS={'Collect': CollectBuilder}) env.Collect('archive', 'directory_name') emitter (). emitter construction variable emitter emitter . ( emitter emitter .) emitter : source target env. source target env construction environment (context) . emitter (tuple) : builder builder. : def e(target, source, env): return target + ['foo.foo'], source + ['foo.src'] # Simple association of an emitter function with a Builder. b = Builder("my_build < $TARGET > $SOURCE", emitter=e) def e2(target, source, env): return target + ['bar.foo'], source + ['bar.src'] # Simple association of a list of emitter functions with a Builder. b = Builder("my_build < $TARGET > $SOURCE", emitter=[e, e2]) # Calling an emitter function through a construction variable. env = Environment(MY_EMITTER=e) b = Builder("my_build < $TARGET > $SOURCE", emitter='$MY_EMITTER') # Calling a list of emitter functions through a construction variable. env = Environment(EMITTER_LIST=[e, e2]) b = Builder("my_build < $TARGET > $SOURCE", emitter='$EMITTER_LIST') # Associating multiple emitters with different file # suffixes using a dictionary. def e_suf1(target, source, env): return target + ['another_target_file'], source def e_suf2(target, source, env): return target, source + ['another_source_file'] b = Builder( action="my_build < $TARGET > $SOURCE", emitter={'.suf1': e_suf1, '.suf2': e_suf2} ) multi ( ) . False () . . env Builder . ( Builder .) generator (actions) () () . () Action Action ( ). generator : source target env for_signature. source target env (context) for_signature (build signature) ( ). for_signature (true) . : def g(source, target, env, for_signature): return [["gcc", "-c", "-o"] + target + source] b = Builder(generator=g) generator action Builder . src_builder . . single_source . ( ). UserError . source_ext_match action . source_ext_match False . scons action . source_ext_match scons foo.in foo.extra . b = Builder(action={'.in': 'build $SOURCES > $TARGET'}, source_ext_match=False) env = Environment(BUILDERS={'MyBuild': b}) env.MyBuild('foo.out', ['foo.in', 'foo.extra']) env Builder . ( Builder .) b = Builder(action="build < $SOURCE > $TARGET") env = Environment(BUILDERS={'MyBuild' : b}) env.MyBuild('foo.out', 'foo.in', my_arg='xyzzy') chdir scons () Builder . chdir (Node) scons . chdir Node scons . scons chdir $TARGET $SOURCE -- chdir . chdir ${TARGET.file} ${SOURCE.file} . b = Builder(action="build < ${SOURCE.file} > ${TARGET.file}", chdir=True) env = Environment(BUILDERS={'MyBuild' : b}) env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in') Python (thread) . chdir SCons ( -j) SCons . Builder ( Builder) Builder (construction environment) . (construction variable) . Builder Builder ( ) . : (command generator functions) Action (function Actions) emitter. builder Action builder - builder SConscript SCons ( ) taskmaster . builder try builder . Action builder SConscript . . Action (Action Objects) Builder action Action Command . Action Action Builder action . Builder Builder Action . Action . action Action . Action action ( ) : o action Action . o action Action . @ . (-) : Action('$CC -c -o $TARGET $SOURCES') # Doesn't print the line being executed. Action('@build $TARGET $SOURCES') # Ignores return value Action('-build $TARGET $SOURCES') o action Action . Action . . (white space) : Action([['cc', '-c', '-DWHITE SPACE', '-o', '$TARGET', '$SOURCES']]) o action (callable) Function Action . : target source env. target Node source Node env (construction environment) . target source Node . () str Python Node : target_file_name = str(target) source_file_names = [str(x) for x in source] () 0 None . (raise) . def build_it(target=None, source=None, env=None): # build the target from the source return 0 a = Action(build_it) o action action Action None . env.Action action . Action Action . Action Action . action . action . : o cmdstr . . $TARGET(S) $SOURCE(S) . SCons . o strfunction action . : target source env action . . o None cmdstr=None . cmdstr strfunction Action . action $PRINT_CMD_LINE_FUNC . : def build_it(target, source, env): # build the target from the source return 0 def string_it(target, source, env): return "building '%s' from '%s'" % (target[0], source[0]) # Use a positional argument. f = Action(build_it, string_it) s = Action(build_it, "building '$TARGET' from '$SOURCE'") # Alternatively, use a keyword argument. f = Action(build_it, strfunction=string_it) s = Action(build_it, cmdstr="building '$TARGET' from '$SOURCE'") # You can provide a configurable variable. l = Action(build_it, '$STRINGIT') Action ( build signature) action . varlist . . action action Python . def build_it(target, source, env): # build the target from the 'XXX' construction variable with open(target[0], 'w') as f: f.write(env['XXX']) return 0 # Use positional arguments. a = Action(build_it, '$STRINGIT', ['XXX']) # Alternatively, use a keyword argument. a = Action(build_it, varlist=['XXX']) Action Action : chdir chdir true ( False ) SCons action . chdir Node SCons . chdir true SCons . chdir SCons $TARGET $SOURCE - chdir . (Builders) chdir ${TARGET.file} ${SOURCE.file} . : a = Action("build < ${SOURCE.file} > ${TARGET.file}", chdir=True) exitstatfunc (callable) ( ) . Action SCons . : def always_succeed(s): # Always return 0, which indicates success. return 0 a = Action("build < ${SOURCE.file} > ${TARGET.file}", exitstatfunc=always_succeed) batch_key Action . ( << >> Microsoft Visual C++ .) batch_key True Action scons Action Action . $CHANGED_SOURCES ( $CHANGED_TARGETS ) . : a = Action('build $CHANGED_SOURCES', batch_key=True) batch_key <<>> (batches) . batch_key : action env target source. action Action . env . target source . . batch_key env scons id() scons . None Action . : def batch_key(action, env, target, source): tdir = target[0].dir if tdir.name == 'special': # Don't batch-build any target # in the special/ subdirectory. return None return (id(action), id(env), tdir) a = Action('build $CHANGED_SOURCES', batch_key=batch_key) Action SCons Action . <> Ant . (factory functions) Action . Action . SConscript Execute : Execute(Touch('file')) Action env.Command . : env = Environment(TMPBUILD='/tmp/builddir') env.Command( target='foo.out', source='foo.in', action=[ Mkdir('$TMPBUILD'), Copy('$TMPBUILD', '${SOURCE.dir}'), "cd $TMPBUILD && make", Delete('$TMPBUILD'), ], ) Chmod(dest, mode) Action dest mode chmod POSIX (octal) . : Execute(Chmod('file', 0o755)) env.Command( 'foo.out', 'foo.in', [Copy('$TARGET', '$SOURCE'), Chmod('$TARGET', 0o755)], ) Execute(Chmod('file', "ugo+w")) env.Command( 'foo.out', 'foo.in', [Copy('$TARGET', '$SOURCE'), Chmod('$TARGET', "ugo+w")], ) Chmod Windows WebAssembly Python os.chmod[8] . Copy(dest, src) Action src dest . src dest . : Execute(Copy('foo.output', 'foo.input')) env.Command('bar.out', 'bar.in', Copy('$TARGET', '$SOURCE')) Delete(entry, [must_exist]) Action entry . . must_exist (true) Python (false) Action . : Execute(Delete('/tmp/buildroot')) env.Command( 'foo.out', 'foo.in', action=[ Delete('${TARGET.dir}'), MyBuildAction, ], ) Execute(Delete('file_that_must_exist', must_exist=True)) Mkdir(name) Action name . name . : Execute(Mkdir('/tmp/outputdir')) env.Command( 'foo.out', 'foo.in', action=[ Mkdir('/tmp/builddir'), Copy('/tmp/builddir/foo.in', '$SOURCE'), "cd /tmp/builddir && make", Copy('$TARGET', '/tmp/builddir/foo.out'), ], ) Move(dest, src) Action src dest . : Execute(Move('file.destination', 'file.source')) env.Command( 'output_file', 'input_file', action=[MyBuildAction, Move('$TARGET', 'file_created_by_MyBuildAction')], ) Touch(file) Action (modification time) file . : Execute(Touch('file_to_be_touched')) env.Command('marker', 'input_file', action=[MyBuildAction, Touch('$TARGET')]) (Variable Substitution) scons () (action) . ${expression} . expression ${expression} Python [ ( /) . ( - Special Attributes ) . expression construction variable ( $ ${ }) construction environment . expression construction environment . expression Special Variables ( ) . expression Python . Python Code Substitution . SCons construction variables : o . o . . o . o (\n) . ( ) . o $ $$ . $$FOO $FOO . (build action) () . build signature ( build action signature) . $( subexpression $) -- build signature . $( $) build signature $( $) . : "echo Last build occurred $( $TODAY $). > $TARGET" : echo Last build occurred $TODAY. > $TARGET (build signature) : echo Last build occurred . > $TARGET (callable) Python ( __call__) . : target source env for_signature. source target env for_signature . (true) for_signature . $( $) . SCons : def foo(target, source, env, for_signature): return "bar" # Will expand $BAR to "bar baz" env = Environment(FOO=foo, BAR="$FOO baz") $BAR . env['BAR'] : "$FOO baz". SConscript print . env.subst . ( __call__) . : class foo: def __init__(self, arg): self.arg = arg def __call__(self, target, source, env, for_signature): return self.arg + " bar" # Will expand $BAR to "my argument bar baz" env=Environment(FOO=foo, BAR="${FOO('my argument')} baz") : (Substitution: Special Variables) scons (Special Variables) : $CHANGED_SOURCES . $CHANGED_TARGETS . $SOURCE . $SOURCES . $TARGET . $TARGETS . $UNCHANGED_SOURCES . $UNCHANGED_TARGETS . . SCons (context-dependent) . : env = Environment(CC='cc') env.Command( target=['foo'], source=['foo.c', 'bar.c'], action='@echo $CC -c -o $TARGET $SOURCES' ) : cc -c -o foo foo.c bar.c ${SOURCES[1]} : bar.c. : (Substitution: Special Attributes) . (special attributes) . base - . dir - . file - . filebase - file . suffix - . abspath - . relpath - . posix - (/) . Windows (POSIX) . windows - (\\) . POSIX (Windows) . win32 () windows . srcpath - VariantDir() . . srcdir - VariantDir() . . rsrcpath - VariantDir() . (Repository) . . rsrcdir - (Repository) VariantDir() . . : $TARGET => sub/dir/file.x ${TARGET.base} => sub/dir/file ${TARGET.dir} => sub/dir ${TARGET.file} => file.x ${TARGET.filebase} => file ${TARGET.suffix} => .x ${TARGET.abspath} => /top/dir/sub/dir/file.x ${TARGET.relpath} => sub/dir/file.x $TARGET => ../dir2/file.x ${TARGET.abspath} => /top/dir2/file.x ${TARGET.relpath} => ../dir2/file.x SConscript('src/SConscript', variant_dir='sub/dir') $SOURCE => sub/dir/file.x ${SOURCE.srcpath} => src/file.x ${SOURCE.srcdir} => src Repository('/usr/repository') $SOURCE => sub/dir/file.x ${SOURCE.rsrcpath} => /usr/repository/src/file.x ${SOURCE.rsrcdir} => /usr/repository/src ${TARGET.srcpath.base), ${TARGET.file.suffix} . Python (Python Code Substitution) ${expression} Python . eval Python globals . : env.Command( 'foo.out', 'foo.in', "echo ${COND==1 and 'FOO' or 'BAR'} > $TARGET" ) : echo FOO > foo.out echo BAR > foo.out env['COND'] . SConscript . env['COND'] SConscript . . COND FOO BAR . FOO . env=Environment() env['COND'] = 1 env['FOO'] = ['foo1', 'foo2'] env['BAR'] = 'barbar' env.Command( 'foo.out', 'foo.in', "echo ${COND==1 and FOO or BAR} > $TARGET" ) : echo foo1 foo2 > foo.out Python : Python $TARGET $SOURCES SCons eval . (Caution) eval Python Python . SCons ${python-expression-for-subst} . Scanner (Scanner Objects) Scanner / (include) . SCons Scanner Scanner . (factory function) Scanner . Scanner . function : function Node ( ) (<<>>) Node ( ) Node . : node env path : arg. node SCons env (construction environment) path path_function . argument Scanner arg . argument arg . str(node) node.dir node.get_contents() node.get_text_contents() . path . C/C++ ( #include "myheader.h"). ( $CPPPATH C/C++) . Scanner path . Scanner path_function Scanner . function . ( ) Scanner . (dispatcher) : skeys Scanner Scanner Node Scanner skeys Node . - - . . Program target_scanner ($LIBS) . SCons . SCons . Node (use-before-create) . . SCons - C string.h . . name Scanner . Scanner . "NONE" . argument function path_function . skeys () Scanner . . Scanner . skeys . path_function . : (construction environment) Node SConscript argument Scanner ( argument path_function ). Scanner . FindPathDirs path_function (construction variable) . path_function=FindPathDirs('CPPPATH') $CPPPATH env path . node_class (Node) Scanner . node_factory . None File . node_factory Python node_class Node Scanner . scan_check Python Node () Node . scanner Node . recursive scanner scanner . Node scanner . scanner #include . (true) recursive Node Node Node . Scanner $SCANNERS SCons . scanner . SCons SourceFileScanner Object SharedObject StaticObject scanner . SourceFileScanner.add_scanner() Scanner SCons : def xyz_scan(node, env, path): contents = node.get_text_contents() # Scan the contents and return the included files. XYZScanner = Scanner(xyz_scan) SourceFileScanner.add_scanner('.xyz', XYZScanner) env.Program('my_prog', ['file1.c', 'file2.f', 'file3.xyz']) (Tool Modules) site_tools site toolpath Environment . tools env.Tool. toolpath tools : env = Environment(tools=['default', 'foo'], toolpath=['tools']) foo tools . toolpath ( site_tools site ) (built-in) . gcc.py toolpath gcc (override) . toolpath env.Tool env.Clone . base = Environment(toolpath=['custom_path']) derived = base.Clone(tools=['custom_tool']) derived.CustomBuilder() Python import Python Python ( mytool.py) ( mytool/) __init__.py . : generate(env, **kwargs) env Builders Emitters . / . : def generate(env): ... if 'MYTOOL' not in env: env['MYTOOL'] = env.Detect("mytool") flags = env.get('MYTOOLFLAGS', SCons.Util.CLVar()) env.AppendUnique(MYTOOLFLAGS='--myarg') ... generate kwargs . exists(env) (context) env (truthy) (falsy) . PATH env exists . exists . generate - . exists . tools ( Tool Tool) Environment (construction environment) . . def my_tool(env): env['XYZZY'] = 'xyzzy' env = Environment(tools=[my_tool]) tools (toolname, kw_dict) . SCons toolname kw_dict generate . generate . # in tools/my_tool.py: def generate(env, **kwargs): # Sets MY_TOOL to the value of keyword 'arg1' or '1' if not supplied env['MY_TOOL'] = kwargs.get('arg1', '1') def exists(env): return True # in SConstruct: env = Environment( tools=['default', ('my_tool', {'arg1': 'abc'})], toolpath=['tools'] ) (my_tool ) $PLATFORM . <<>> (nested) - toolpath . . # namespaced builder env = Environment(ENV=os.environ.copy(), tools=['SubDir1.SubDir2.SomeTool']) env.SomeTool(targets, sources) # Search Paths # SCons\Tool\SubDir1\SubDir2\SomeTool.py # SCons\Tool\SubDir1\SubDir2\SomeTool\__init__.py # .\site_scons\site_tools\SubDir1\SubDir2\SomeTool.py # .\site_scons\site_tools\SubDir1\SubDir2\SomeTool\__init__.py (SYSTEM-SPECIFIC BEHAVIOR) scons Python . . .C (.C File Suffix) scons .C . Linux UNIX scons .C C++ . Windows scons .C C . (Fortran File Suffixes) Fortran SCons ( ). Fortran . SCons ( ) . . : .f ( .for .ftn) fortran ( FORTRAN ) .f77 f77 ( F77 ) .f90 f90 ( F90 ) .f95 f95 ( F95 ) .f03 f03 ( F03 ) .f08 f08 ( F08 ). SCons Fortran : .f ( .for .ftn) (fixed-format) FORTRAN 77 .f90 (free-format) Fortran 90 . Fortran F90 .f90 - . .f .f90 Fortran . / ( -ffixed-form gfortran) . - .f08 Fortran 2008 . ( -std=f2008 gfortran). F90 ( FORTRAN) .mod Fortran . Fortran . SCons (submodules) Fortran 2008 - SCons .smod . Linux UNIX .F .FOR .FTN .F90 .F95 .F03 .F08 Fortran C . . .FPP .fpp . gfortran (GNU Compiler Collection) Fortran . FORTRAN . SCons . $FORTRANPPCOM $FORTRANPPCOMSTR $FORTRANCOM $FORTRANCOMSTR . : Cygwin Cygwin Python Python Cygwin -POSIX . Cygwin Cygwin Python POSIX . Cygwin Cygwin /cygdrive/c/mydir C:/mydir ( C:\mydir) . Python (native) python.org ActiveState Cygwin . Python Cygwin ( gcc bison flex) . << >> SConscript . : gcc Cygwin Python Cygwin scons Microsoft Visual C++ ( <<>> ) python.org Microsoft Store ActiveState Python scons . msys2 ( mingw) scons msys2 msys2 Python . : scons.bat scons (batch file) scons.bat () . - scons pip Python scons.exe : scons: scons "FOO=BAR" "BAZ=BLEH" Cygwin scons . scons.bat ( ) Cygwin scons scons.bat . MinGW bin MinGW PATH ['ENV']['PATH'] scons MinGW . Python Windows scons MinGW bin PATH Cygwin . MSVC MinGW MSVC MinGW tools=['mingw'] Environment scons MinGW scons MSVC MinGW . (ENVIRONMENT) scons (import) SConscript . scons : SCONS_LIB_DIR Python scons . scons ( /home/aroach/scons-src-0.01/src/engine). SCONSFLAGS scons . . SCONSFLAGS SCONSFLAGS . SCONS_CACHE_MSVC_CONFIG ( Windows). Microsoft Visual C++ ( Build Tools) scons . scons (CI) . ("1" "true" "True") scons_msvc_cache.json . . : . - . SCons . 3.1 (). 4.4 . (SEE ALSO) SCons https://scons.org/doc/production/HTML/scons-user.html SCons () SCons (SCons Cookbook) https://scons-cookbook.readthedocs.io SCons. SCons GitHub[9] API SCons https://scons.org/doc/production/HTML/scons-api/index.html ( ) (AUTHORS) : Steven Knight knight@baldmt.com Anthony Roach aroach@electriceyeball.com. : The SCons Development Team scons-dev@python.org. (AUTHOR) The SCons Development Team (COPYRIGHT) (C) 2001 - 2026 The SCons Foundation (NOTES) 1. LLVM https://clang.llvm.org/docs/JSONCompilationDatabase.html 2. JEP 313 https:openjdk.java.net/jeps/313 3. https://learn.microsoft.com/en-us/cpp/build/reference/vcxproj-file- structure https://learn.microsoft.com/en-us/cpp/build/reference/vcxproj-file- structure 4. https://learn.microsoft.com/en- us/visualstudio/extensibility/internals/solution-dot-sln-file https://learn.microsoft.com/en- us/visualstudio/extensibility/internals/solution-dot-sln-file 5. optparse https://docs.python.org/3/library/optparse.html 6. no_progress SetOption SConscript ( site_init.py ) SConscript SCons SetOption . 7. http://www.opensource.org/licenses/alphabetical http://www.opensource.org/licenses/alphabetical 8. os.chmod https://docs.python.org/3/library/os.html#os.chmod 9. GitHub https://github.com/SCons/scons SCons 4.11.1 Version 4.11. Released Wed, 26 Aug 2026 21:18:42 -0700 SCONS(1)