SCONS(1) SCons 4.11.1 SCONS(1)

scons - ابزاری برای ساخت نرم‌افزار

scons [گزینه‌ها...] [name=val...] [هدف‌ها...]

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 نادیده گرفته و جایگزین شود.

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

برای نمونه، چهار هدف را به‌صورت موازی می‌سازد.

به‌طور کلی، 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) را چاپ می‌کند:
•زمان صرف‌شده برای اجرای هر فرمان ساخت به صورت جداگانه
•زمان کل ساخت (مدت زمانی که SCons از ابتدا تا انتها اجرا شد)
•زمان کل صرف‌شده برای خواندن و اجرای فایل‌های SConscript
•زمان کل صرف‌شده برای اجرای خود SCons (یعنی بدون احتساب خواندن و اجرای فایل‌های SConscript)
•زمان کل صرف‌شده برای اجرای همه فرمان‌های ساخت
•زمان واقعی سپری‌شده (wall-clock time) برای اجرای آن فرمان‌های ساخت
•زمان صرف‌شده برای پردازش هر فایل ارائه‌شده به تابع 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 شناخته می‌شوند. برای یک ساخت معتبر باید حداقل یک فایل وجود داشته باشد (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 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” مراجعه کنید.

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، باید این موارد را نصب داشته باشید:

•اتصال پایتونی lxml به libxml2، یا
•یک پردازندهٔ مستقل 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 پشتیبانی می‌کند. این مجموعه ابزار، ابزارهای زیر را بارگذاری می‌کند:
• xgettext - استخراج پیام‌های بین‌المللی‌شده از کد منبع به فایل(های) POT.
• msginit - مقداردهی اولیه فایل‌های PO در طول ترجمه اولیه یک پروژه.
• msgmerge - به‌روزرسانی فایل‌های PO که از قبل حاوی پیام‌های ترجمه‌شده هستند،
• 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 مستقیماً چیزی را نمی‌سازد، بلکه هدف یا اهداف (آنچه می‌خواهید ساخته شود)، منابع (آنچه هدف از آن ساخته می‌شود) و محیط ساخت (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ها) باشند.

•Nodeها همیشه کار می‌کنند، زیرا نتیجه یک تفکیک مسیر موفق قبلی هستند؛ اگر یک رشته مسیر به درستی حل شود، به صورت داخلی به عنوان یک Node در گراف وابستگی ذخیره می‌شود.
•نام‌های ساده فایل (بدون جداکننده‌های مسیر) در دایرکتوری جاری جستجو می‌شوند.
•مسیرهای مطلق (که با یک جداکننده مسیر آغاز می‌شوند) با پیمایش اجزای مسیر با شروع از ریشه سیستم‌فایل یا درایو (volume) جاری حل می‌شوند.
•مسیرهای نسبی (بدون جداکننده مسیر در ابتدا) با پیمایش اجزای مسیر با شروع از دایرکتوری جاری حل می‌شوند.
•مسیرهای نسبی به شاخه اصلی (Top-relative paths) مسیرهای نسبی‌ای هستند که نویسه اول آن‌ها # است. آن‌ها با شروع از دایرکتوری سطح بالای پروژه (معمولاً دایرکتوری که فایل SConstruct در آن یافت می‌شود) پیمایش می‌شوند. این مسیرها همواره مسیرهایی نسبی هستند، بنابراین نویسه اولیه می‌تواند با یک جداکننده مسیر دنبال شود، که البته نادیده گرفته می‌شود و تاثیری بر حل مسیر ندارد.
•مسیرهای UNC (در Windows) دقیقاً با دو جداکننده مسیر آغاز می‌شوند. آن‌ها ساختاری به شکل \\server_name\share_name\file_path دارند. بخش file_path به عنوان یک مسیر مطلق با شروع از ریشه منبع توصیف‌شده توسط \\server_name\share_name جستجو می‌شود. از آنجا که مسیرهای UNC هرگز نسبی نیستند، قالب مسیرهای نسبی به شاخه اصلی روی آن‌ها اعمال نمی‌شود.
•رشته‌های به سبک 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 وجود ندارد، بلکه اصطلاح «Command Builder» به تابعی اشاره دارد که در هر فراخوانی، یک 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 استفاده شود (مانند انتخاب «build» از رابط کاربری 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 مجموعه‌ای از متدهای محیط ساخت و توابع سراسری را برای دستکاری پیکربندی ساخت فراهم می‌کند. اغلب برای راحتی کار، یک متد محیط ساخت و یک تابع سراسری با نامی یکسان وجود دارند. در این بخش، در صورتی که تابعی بتواند به هر دو صورت فراخوانی شود، هر دو حالت نشان داده شده‌اند. سبک مستندسازی برای این موارد به صورت زیر است:

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 را دارد. برای توضیحات کامل، بخش «Action Objects» در این صفحهٔ راهنما را ببینید.

هنگامی که چندین هدف مشخص شده باشند، کنش(ها) ممکن است چندین بار فراخوانی شوند؛ یک بار پیش از هر کنشی که یک یا چند هدف از فهرست را تولید می‌کند.

توجه داشته باشید که اگر هر یک از هدف‌ها در چند مرحله ساخته شوند، کنش درست پیش از مرحله‌ای فراخوانی می‌شود که مشخصاً هدف(های) تعیین‌شده را تولید می‌کند. شاید همیشه آشکار نباشد که یک فرایند چندمرحله‌ای است یا خیر - برای نمونه، اگر از سازندهٔ 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 از این قوانین پیروی می‌کند:

•یک رشته بر اساس فاصله‌ها تفکیک می‌شود، که راهی آسان برای وارد کردن چندین ماکرو در یک مرحله فراهم می‌کند. برای مشخص کردن یک ماکروی مقداردار از یک = استفاده کنید.
•یک تاپل به عنوان یک ماکروی مقداردار در نظر گرفته می‌شود. اگر ماکرو نباید مقداری داشته باشد از مقدار None استفاده کنید. ارائه بیش از دو عنصر در چنین تاپلی یک خطا محسوب می‌شود.
•یک فهرست به ترتیب پردازش می‌شود و هر مورد بدون تفسیر بیشتر افزوده می‌گردد. در این حالت، رشته‌های جداشده با فاصله تفکیک نمی‌شوند.
•یک دیکشنری به ترتیب پردازش می‌شود و هر جفت کلید-مقدار به عنوان یک ماکروی مقداردار اضافه می‌گردد. اگر ماکرو نباید مقداری داشته باشد از مقدار 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 ایجاد می‌کند. برای توضیح کامل آرگومان‌ها و رفتار، بخش «Configure Contexts» در این صفحهٔ راهنما را ببینید.

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 به‌طور ویژه شناخته می‌شوند و منجر به ایجاد متغیر ساخت نمی‌شوند. برای جزئیات بیشتر به بخش «Construction Environments» در صفحهٔ راهنما مراجعه کنید.

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, -u, --up, --search_up عدد صحیح. 1 یعنی -u داده شده است، 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 مشخص‌شده ایجاد می‌کند. برای توضیح کامل آرگومان‌ها و رفتار، به بخش «Scanner Objects» در صفحه راهنما مراجعه کنید.

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 را انتخاب نخواهد کرد.

علاوه بر توابع و متدهای سراسری، 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 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 ساخته می‌شود، به خطوط فرمان افزوده می‌شوند:
•اگر $CPPDEFINES یک رشته باشد، مقادیر متغیرهای ساخت $CPPDEFPREFIX و $CPPDEFSUFFIX به‌صورت جداگانه بر اساس فواصل خالی (whitespace)، به‌ترتیب به هر تعریف در $CPPDEFINES پیشوند و پسوند می‌شوند.
# Adds -Dxyz to POSIX compiler command lines,
# and /Dxyz to Microsoft Visual C++ command lines.
env = Environment(CPPDEFINES='xyz')
•اگر $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'])
•اگر $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 <Fmwk/Header.h> استفاده می‌شود. توسط پیونددهنده برای یافتن 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 است. بخش «Builder Objects» در صفحهٔ راهنما حاوی اطلاعات عمومی دربارهٔ مشخص کردن 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 هنگامی اعمال می‌شود که هر یک از شرایط زیر برقرار باشد:

• $MSVC_VERSION مشخص شده باشد، فهرست ابزارهای پیش‌فرض به صورت ضمنی تعریف شده باشد (یعنی فهرست ابزارها مشخص نشده باشد)، و فهرست ابزارهای پیش‌فرض شامل یک یا چند مورد از ابزارهای msvc باشد.
• $MSVC_VERSION مشخص شده باشد، فهرست ابزارهای پیش‌فرض به صورت صریح مشخص شده باشد (مانند tools=['default'])، و فهرست ابزارهای پیش‌فرض شامل یک یا چند مورد از ابزارهای msvc باشد.
•یک فهرست ابزار غیرپیش‌فرض مشخص شده باشد که شامل یک یا چند مورد از ابزارهای msvc باشد (مانند tools=['msvc', 'mslink']).

متغیر $MSVC_NOTFOUND_POLICY هنگامی نادیده گرفته می‌شود که هر یک از شرایط زیر برقرار باشد:

• $MSVC_VERSION مشخص نشده باشد و فهرست ابزارهای پیش‌فرض به صورت ضمنی تعریف شده باشد (یعنی فهرست ابزارها مشخص نشده باشد).
• $MSVC_VERSION مشخص نشده باشد و فهرست ابزارهای پیش‌فرض به صورت صریح مشخص شده باشد (مانند tools=['default']).
•یک فهرست ابزار غیرپیش‌فرض مشخص شده باشد که شامل هیچ‌یک از ابزارهای msvc نباشد (مانند tools=['mingw']).

جزئیات مهم استفاده:

• $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) ایجاد می‌شود:

• $MSVC_SCRIPT_ARGS برای Visual Studio 2013 و نسخه‌های پیش از آن مشخص شده باشد.
•چندین آرگومان نگارش SDK (مانند '10.0.20348.0') در $MSVC_SCRIPT_ARGS مشخص شده باشد.
• $MSVC_SDK_VERSION مشخص شده باشد و یک آرگومان نگارش SDK (مانند '10.0.20348.0') در $MSVC_SCRIPT_ARGS مشخص شده باشد. اعلان چندگانه نگارش SDK از طریق $MSVC_SDK_VERSION و $MSVC_SCRIPT_ARGS مجاز نیست.
•چندین آرگومان نگارش toolset (مانند '-vcvars_ver=14.29') در $MSVC_SCRIPT_ARGS مشخص شده باشد.
• $MSVC_TOOLSET_VERSION مشخص شده باشد و یک آرگومان نگارش toolset (مانند '-vcvars_ver=14.29') در $MSVC_SCRIPT_ARGS مشخص شده باشد. اعلان چندگانه نگارش toolset از طریق $MSVC_TOOLSET_VERSION و $MSVC_SCRIPT_ARGS مجاز نیست.
•چندین آرگومان کتابخانه spectre (مانند '-vcvars_spectre_libs=spectre') در $MSVC_SCRIPT_ARGS مشخص شده باشد.
• $MSVC_SPECTRE_LIBS فعال باشد و یک آرگومان کتابخانه spectre (مانند '-vcvars_spectre_libs=spectre') در $MSVC_SCRIPT_ARGS مشخص شده باشد. اعلان چندگانه کتابخانه spectre از طریق $MSVC_SPECTRE_LIBS و $MSVC_SCRIPT_ARGS مجاز نیست.
•چندین آرگومان UWP (مانند uwp یا store) در $MSVC_SCRIPT_ARGS مشخص شده باشد.
• $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'])

جزئیات مهم استفاده:

• $MSVC_SCRIPT_ARGS باید به‌عنوان یک آرگومان به سازنده Environment ارسال شود، هنگامی که یک ابزار msvc (مانند msvc، msvs و غیره) از طریق فهرست پیش‌فرض ابزارها یا از طریق فهرست ابزارهای ارائه‌شده به سازنده Environment بارگذاری می‌شود. در غیر این صورت، $MSVC_SCRIPT_ARGS باید پیش از بارگذاری نخستین ابزار msvc در محیط تنظیم گردد.
•به‌جز بررسی برای اعلان‌های چندگانه به همان صورت که در بالا شرح داده شد، آرگومان‌های $MSVC_SCRIPT_ARGS اعتبارسنجی نمی‌شوند.
• آرگومان‌های نادرست، ناسازگار و/یا ناهماهنگ با نسخه برای $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'

جزئیات مهم استفاده:

• $MSVC_SCRIPTERROR_POLICY باید هنگام بارگذاری یک ابزار msvc (مانند msvc، msvs و غیره) از طریق فهرست پیش‌فرض ابزارها یا از طریق فهرست ابزارهای ارائه‌شده به سازندهٔ Environment، به عنوان یک آرگومان به سازندهٔ Environment ارسال شود. در غیر این صورت، $MSVC_SCRIPTERROR_POLICY باید پیش از بارگذاری نخستین ابزار msvc در محیط تنظیم گردد.
•به دلیل جزئیات پیاده‌سازی 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 نادیده گرفته می‌شود. شرایط اعتبارسنجی زیر اعمال نمی‌شوند.

در صورت برقراری هر یک از شرایط زیر، یک استثنا ایجاد می‌شود:

•مقدار $MSVC_SDK_VERSION برای Visual Studio 2013 و نسخه‌های پیش از آن مشخص شده باشد.
•مقدار $MSVC_SDK_VERSION تعیین شده باشد و یک آرگومان نسخهٔ SDK نیز در $MSVC_SCRIPT_ARGS مشخص شده باشد. تعریف چندگانهٔ نسخهٔ SDK از طریق $MSVC_SDK_VERSION و $MSVC_SCRIPT_ARGS مجاز نیست.
•مقدار مشخص‌شده برای $MSVC_SDK_VERSION با هیچ‌یک از قالب‌های پشتیبانی‌شده مطابقت نداشته باشد:
•'10.0.XXXXX.Y' [SDK 10.0]
•'8.1' [SDK 8.1]
•پوشهٔ سیستمی مربوط به نسخهٔ متناظر $MSVC_SDK_VERSION یافت نشود. به نظر می‌رسد نسخهٔ درخواستی SDK نصب نشده است.
•به نظر می‌رسد نسخهٔ $MSVC_SDK_VERSION از نوع پلتفرم درخواستی (یعنی UWP یا Desktop) پشتیبانی نمی‌کند. به نظر می‌رسد مؤلفه‌های نوع پلتفرمِ نسخهٔ SDK درخواستی نصب نشده‌اند.
•نسخهٔ $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)

نکات مهم استفاده:

•هنگامی که یک ابزار msvc (مانند msvc، msvs و غیره) از طریق فهرست پیش‌فرض ابزارها یا از طریق فهرست ابزارهای ارسال‌شده به سازندهٔ Environment بارگذاری می‌شود، $MSVC_SDK_VERSION باید به عنوان آرگومان به سازندهٔ Environment ارسال شود. در غیر این صورت، $MSVC_SDK_VERSION باید پیش از بارگذاری نخستین ابزار msvc در محیط تنظیم گردد.
•چنانچه نسخه‌ای از SDK 10.0 نصب شده باشد که از الگوی نام‌گذاری بالا پیروی نکند، تا زمانی که قالب اعتبارسنجی شمارهٔ نسخه گسترش یابد، نسخهٔ SDK باید از طریق $MSVC_SCRIPT_ARGS تعیین شود.
•چنانچه استثنایی مبنی بر پیدا نشدن نسخهٔ SDK ایجاد شد، بررسی کنید که نسخهٔ SDK درخواستی همراه با مؤلفه‌های ضروری نوع پلتفرم نصب شده باشد.
•یک مشکل شناخته‌شده در کتابخانه‌های 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++ خواهد بود.

در صورت برقرار بودن هر یک از شرایط زیر، یک استثنا رخ می‌دهد:

• $MSVC_SPECTRE_LIBS برای Visual Studio 2015 و پیش از آن فعال شده باشد.
• $MSVC_SPECTRE_LIBS فعال باشد و یک آرگومان کتابخانه spectre در $MSVC_SCRIPT_ARGS مشخص شده باشد. تعریف چندگانه کتابخانه spectre از طریق $MSVC_SPECTRE_LIBS و $MSVC_SCRIPT_ARGS مجاز نیست.
• $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)

جزئیات مهم استفاده:

• هنگامی که یک ابزار msvc (مانند msvc، msvs و غیره) از طریق فهرست پیش‌فرض ابزارها یا فهرستی از ابزارها که به سازنده Environment ارسال شده بارگذاری می‌شود، $MSVC_SPECTRE_LIBS باید به عنوان آرگومان به سازنده Environment ارسال شود. در غیر این صورت، $MSVC_SPECTRE_LIBS باید پیش از بارگذاری نخستین ابزار msvc در محیط مقداردهی شود.
•سوئیچ‌های اضافی کامپایلر (مانند /Qspectre) برای اعمال تخفیف‌های spectre هنگام ساخت مصنوعات کاربر ضروری هستند. برای جزئیات به مستندات Visual Studio مراجعه کنید.
• هنگام فعال بودن $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 نادیده گرفته می‌شود. شرایط اعتبارسنجی زیر اعمال نخواهند شد.

در صورت برقرار بودن هر یک از شرایط زیر، یک استثنا رخ می‌دهد:

• $MSVC_TOOLSET_VERSION برای Visual Studio 2015 و پیش از آن مشخص شده باشد.
• $MSVC_TOOLSET_VERSION مشخص شده باشد و یک آرگومان نسخه مجموعه ابزار در $MSVC_SCRIPT_ARGS تعیین شده باشد. اعلان‌های چندگانه نسخه مجموعه ابزار از طریق $MSVC_TOOLSET_VERSION و $MSVC_SCRIPT_ARGS مجاز نیست.
•مقدار $MSVC_TOOLSET_VERSION مشخص‌شده با هیچ‌یک از قالب‌های پشتیبانی‌شده همخوانی نداشته باشد:
• 'XX.Y'
• 'XX.YY'
• 'XX.YY.ZZZZZ'
• 'XX.YY.Z' تا 'XX.YY.ZZZZ' [افزونهٔ scons که مستقیماً توسط فایل‌های دسته‌ای (batch) msvc پشتیبانی نمی‌شود و ممکن است در آینده حذف شود]
• 'XX.YY.ZZ.N' [قالب SxS]
• 'XX.YY.ZZ.NN' [قالب SxS]
•پیشوند نسخهٔ اصلی msvc (یعنی 'XX.Y') مربوط به $MSVC_TOOLSET_VERSION مشخص‌شده، برای Visual Studio 2013 و قبل‌تر است (مثلاً '12.0').
•پیشوند نسخهٔ اصلی msvc (یعنی 'XX.Y') مربوط به $MSVC_TOOLSET_VERSION مشخص‌شده، بزرگ‌تر از نسخهٔ انتخاب‌شدهٔ msvc است (مثلاً '99.0').
•پوشهٔ سیستمی برای نسخهٔ متناظر $MSVC_TOOLSET_VERSION یافت نشد. به نظر می‌رسد نسخهٔ مجموعه‌ابزار درخواست‌شده نصب نشده باشد.

جزئیات انتخاب مجموعه‌ابزار:

•هنگامی که $MSVC_TOOLSET_VERSION یک شماره نسخهٔ SxS یا شماره نسخهٔ کامل مجموعه‌ابزار نباشد: نخستین نسخهٔ مجموعه‌ابزار با رتبه‌بندی به ترتیب نزولی که با پیشوند $MSVC_TOOLSET_VERSION مطابقت داشته باشد، انتخاب می‌شود.
•هنگامی که $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')

جزئیات مهم استفاده:

• $MSVC_TOOLSET_VERSION باید به عنوان یک آرگومان به سازندهٔ Environment داده شود هنگامی که یک ابزار msvc (مانند msvc، msvs و غیره) از طریق فهرست پیش‌فرض ابزارها یا از طریق فهرست ابزارهای ارسال‌شده به سازندهٔ Environment بارگذاری می‌شود. در غیر این صورت، $MSVC_TOOLSET_VERSION باید پیش از بارگذاری نخستین ابزار msvc در محیط تنظیم شود.
• هنگام مشخص شدن $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)

جزئیات مهم در استفاده:

• هنگامی که یک ابزار msvc (مانند msvc، msvs و غیره) از طریق فهرست پیش‌فرض ابزارها یا از طریق فهرست ابزارهای ارسال‌شده به سازنده Environment بارگذاری می‌شود، $MSVC_USE_SETTINGS باید به عنوان یک آرگومان به سازنده Environment ارسال شود. در غیر این صورت، $MSVC_USE_SETTINGS باید پیش از بارگذاری اولین ابزار msvc در محیط تنظیم گردد.
• نیازمندی‌های محتوای دیکشنری بر اساس پیاده‌سازی داخلی 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) ایجاد می‌شود:

• $MSVC_UWP_APP برای Visual Studio 2013 و پیش از آن فعال شده باشد.
• $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)

جزئیات مهم استفاده:

• هنگامی که یک ابزار msvc (مانند msvc، msvs و غیره) از طریق فهرست پیش‌فرض ابزارها یا فهرستی از ابزارها که به سازنده Environment ارسال شده بارگیری می‌شود، $MSVC_UWP_APP باید به‌عنوان یک آرگومان به سازنده Environment داده شود. در غیر این صورت، $MSVC_UWP_APP باید پیش از بارگیری نخستین ابزار msvc در محیط تنظیم شود.
• هنگام فعال بودن $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' به‌عنوان یک جای‌نگه‌دار برای یک رقم متغیر استفاده می‌شود).

کلید SCons نسخه Visual C++ _MSVC_VER محصول Visual Studio MSBuild / Visual Studio
"14.5" 14.5x 195x Visual Studio 2026 18.x
"14.3" 14.3x 193x Visual Studio 2022 17.x, 17.1x
"14.2" 14.2x 192x Visual Studio 2019 16.x, 16.1x
"14.1" 14.1 یا 14.1x 191x Visual Studio 2017 15.x
"14.1Exp" 14.1 یا 14.1x 191x Visual Studio 2017 Express 15.x
"14.0" 14.0 1900 Visual Studio 2015 14.0
"14.0Exp" 14.0 1900 Visual Studio 2015 Express 14.0
"12.0" 12.0 1800 Visual Studio 2013 12.0
"12.0Exp" 12.0 1800 Visual Studio 2013 Express 12.0
"11.0" 11.0 1700 Visual Studio 2012 11.0
"11.0Exp" 11.0 1700 Visual Studio 2012 Express 11.0
"10.0" 10.0 1600 Visual Studio 2010 10.0
"10.0Exp" 10.0 1600 Visual C++ Express 2010 10.0
"9.0" 9.0 1500 Visual Studio 2008 9.0
"9.0Exp" 9.0 1500 Visual C++ Express 2008 9.0
"8.0" 8.0 1400 Visual Studio 2005 8.0
"8.0Exp" 8.0 1400 Visual C++ Express 2005 8.0
"7.1" 7.1 1300 Visual Studio .NET 2003 7.1
"7.0" 7.0 1200 Visual Studio .NET 2002 7.0
"6.0" 6.0 1100 Visual Studio 6.0 6.0

نکته
•برای ساخت با SCons نیازی به نصب Visual Studio IDE نیست (برای نمونه، می‌توانید تنها Build Tools را نصب کنید)، اما زمانی که Visual Studio IDE نصب شده باشد، سازنده‌های دیگری مانند MSVSSolution و MSVSProject در دسترس قرار می‌گیرند و متناظر با نسخه‌های مشخص‌شده خواهند بود.
•نسخه‌هایی که به Exp ختم می‌شوند، به نگارش‌های قدیمی «Express» یا «Express for Desktop» ویژوال استودیو اشاره دارند که در مقایسه با نگارش‌های کامل محدودیت‌های قابلیتی داشتند. مشخص کردن پسوند 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 است. بخش «Builder Objects» در صفحهٔ راهنما حاوی اطلاعات عمومی دربارهٔ تعیین گسیل‌دهنده‌ها است.

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

یک نام متغیر رزرو شده که نباید در یک محیط ساخت مقداردهی یا استفاده شود. (برای اطلاعات بیشتر بخش «Variable Substitution» را در صفحه راهنما ببینید).

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<dir> را از فهرست $XGETTEXTPATH تولید می‌کند.

XGETTEXTFROMPREFIX

این پرچم برای افزودن یک فایل $XGETTEXTFROM به خط فرمان xgettext(1) به کار می‌رود (پیش‌فرض: '-f').

XGETTEXTFROMSUFFIX

(پیش‌فرض: '')

XGETTEXTPATH

فهرست دایرکتوری‌هایی که در آن‌ها xgettext(1) به دنبال فایل‌های منبع خواهد گشت (پیش‌فرض: []).

نکته
این متغیر تنها همراه با $XGETTEXTFROM کار می‌کند.
همچنین ابزار xgettext و سازندهٔ POTUpdate را ببینید.

_XGETTEXTPATHFLAGS

«ماکرو» داخلی. فهرستی از پرچم‌های -f<file> را از $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.

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 <time.h>')

یک مقدار بولی نشان‌دهنده موفقیت یا شکست را برمی‌گرداند.

اضافه‌شده در 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 <qapp.h>
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()

ابزار 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,
    ),
)

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 به‌گونه‌ای طراحی شده است که از طریق امکانات ارائه‌شده قابل گسترش باشد، بنابراین برای سفارشی‌سازی رفتار آن، به‌ندرت به تغییر کدِ خودِ SCons نیاز است. تعدادی از عملیات اصلی از اشیای قابل فراخوانی (callable objects) استفاده می‌کنند که با نوشتن موارد دلخواه خود می‌توانید آن‌ها را تکمیل کنید. Builders، Scanners و Tools هر یک از نوعی سامانهٔ افزونه‌ای استفاده می‌کنند که به شما اجازه می‌دهد به‌سادگی موارد جدیدی را به کار بگیرید. اطلاعات دربارهٔ ایجاد Builder Objects و Scanner Objects در بخش‌های بعدی آمده است. دستورالعمل‌هایی که SCons در عمل برای ساخت چیزها به کار می‌برد Actions نام دارند، و ایجاد Action Objects و سپردن آن‌ها به اشیایی که نیاز به دانستن آن کنش‌ها دارند ساده است (علاوه بر Builders، به AddPostAction، AddPreAction و Alias برای نمونه‌هایی دیگر از بخش‌هایی که Actions را می‌پذیرند مراجعه کنید). Action Objects نیز در ادامه تشریح شده‌اند. افزودن پیمانه‌های جدید Tool در Tool Modules توضیح داده شده است.

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 است خارج شود. تلاش برای بازیابی برنامه‌نویسی‌شده از خطاهای ساخت به ندرت مفید واقع می‌شود.

تابع کارخانه‌ای Builder آرگومان کلیدواژه‌ای action خود را به یک شیء Action داخلی مناسب تبدیل می‌کند، همان‌گونه که تابع Command عمل می‌کند. همچنین می‌توانید با فراخوانی تابع کارخانه‌ای Action، اشیاء Action را به طور صریح برای ارسال به Builder، یا سایر توابعی که actionها را به عنوان آرگومان می‌پذیرند، ایجاد کنید. هنگامی که چندین شیء Builder نیاز به انجام کار یکسانی دارند، این کار کارآمدتر از این است که به هر یک از آن اشیاء Builder اجازه داده شود یک شیء Action جداگانه بسازند. همچنین امکان پیکربندی انعطاف‌پذیرتری را برای یک شیء Action فراهم می‌کند. برای نمونه، جهت کنترل پیامی که هنگام انجام اقدام چاپ می‌شود، باید شیء action را با استفاده از Action ایجاد کنید.

تابع کارخانه‌ای Action بسته به نوع آرگومان action (نخستین پارامتر موضعی)، شیء مناسبی را برای آن اقدام بازمی‌گرداند:

•اگر action از قبل یک شیء Action باشد، همان شیء صرفاً بازگردانده می‌شود.
•اگر 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')
•اگر action یک لیست باشد، فهرستی از اشیاء Action بازگردانده می‌شود. برای هر عنصر در لیست، در صورت لزوم یک شیء Action ایجاد می‌شود. اگر عنصری درون لیست خود یک لیست باشد، لیست تعبیه‌شده به عنوان فرمان و آرگومان‌هایی در نظر گرفته می‌شود که باید از طریق خط فرمان اجرا شوند. این قابلیت اجازه می‌دهد تا با تعریف یک فرمان در یک لیست درون لیستی دیگر، نویسه فاصله (white space) به جای آنکه به عنوان جداکننده تلقی شود، درون یک آرگومان محصور گردد:
Action([['cc', '-c', '-DWHITE SPACE', '-o', '$TARGET', '$SOURCES']])
•اگر 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)
•اگر action یکی از انواع بالا نباشد، هیچ شیء actionای تولید نمی‌شود و Action مقدار None را بازمی‌گرداند.

فرم متد محیط env.Action در زمان فراخوانی، متغیرهای ساخت را در تمام رشته‌های آرگومان، از جمله action، با استفاده از متغیرهای ساخت موجود در محیط ساخت که از طریق آن فراخوانی شده است، بسط می‌دهد. فرم تابع سراسری Action بسط متغیرها را تا زمانی که شیء Action واقعاً استفاده شود به تأخیر می‌اندازد.

آرگومان اختیاری دوم برای Action جهت کنترل خروجی‌ای استفاده می‌شود که هنگام اجرای واقعی Action چاپ می‌گردد. اگر این پارامتر حذف شود، یا مقدار آن یک رشتهٔ خالی باشد، یک خروجی پیش‌فرض بسته به نوع action استفاده می‌شود. برای مثال، یک action خط فرمانی، دستور اجرا شده را چاپ خواهد کرد. انواع آرگومان‌های زیر پذیرفته می‌شوند:

•اگر آرگومان دوم یک رشته باشد، یا اگر آرگومان کلیدواژه‌ای cmdstr داده شده باشد، این رشته مشخص می‌کند چه چیزی چاپ شود. جایگزینی متغیرها قبل از چاپ رشته روی آن انجام می‌شود. این رشته معمولاً شامل متغیرهای قابل جایگزینی است، به‌ویژه $TARGET(S) و $SOURCE(S)، یا فقط شامل یک متغیر تکی است که به‌صورت اختیاری در جای دیگری تعریف شده است. خود SCons به‌طور گسترده‌ای از حالت دوم استفاده می‌کند.
•اگر آرگومان دوم یک تابع باشد، یا اگر آرگومان کلیدواژه‌ای strfunction داده شده باشد، این تابع فراخوانی خواهد شد تا رشته‌ای را که باید هنگام اجرای action چاپ شود به دست آورد. این تابع باید سه آرگومان کلیدواژه‌ای بپذیرد: target، source و env، با همان تفسیری که برای آرگومان قابل فراخوانیِ action در بالا ذکر شد. این تابع مسئول مدیریت هرگونه جایگزینی لازم است.
•اگر آرگومان دوم 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 مختلفی را فراهم می‌کند که امکان انجام انواع عملیات رایج بر روی فایل‌ها و دایرکتوری‌ها را مهیا می‌سازند. این توابع از نظر مفهومی شبیه به «tasks» در ابزار ساخت 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 به رشته‌های خط فرمان، از قوانین زیر پیروی می‌کند:

•اگر مقدار یک رشته باشد، به عنوان آرگومان‌های خط فرمان که با فاصله جدا شده‌اند تفسیر می‌شود.
•اگر مقدار یک لیست باشد، به عنوان فهرستی از آرگومان‌های خط فرمان تفسیر می‌شود. هر عنصر از لیست به یک رشته تبدیل می‌شود.
•هر چیزی که لیست یا رشته نباشد، به رشته تبدیل شده و به عنوان یک آرگومان خط فرمان تکی تفسیر می‌شود.
•نویسه‌های خط جدید (\n) خطوط را از هم جدا می‌کنند. تجزیهٔ خط جدید پس از تمام تجزیه‌های دیگر انجام می‌شود، بنابراین ممکن نیست آرگومان‌ها (مانند نام فایل‌ها) حاوی نویسه‌های خط جدید توکار باشند.
•برای یک نویسهٔ واقعی $ از $$ استفاده کنید. برای مثال، $$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 برای پویش انواع خاصی از فایل‌ها به منظور یافتن وابستگی‌های ضمنی استفاده می‌شوند؛ برای نمونه، دستورهای تعبیه‌شدهٔ پیش‌پردازنده/کامپایلر که موجب می‌شوند فایل‌های دیگر در حین پردازش ضمیمه (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'])

ابزارهای سفارشی را می‌توان یا با قرار دادن آن‌ها در زیردایرکتوری 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

scons و فایل‌های پیکربندی آن تا حد زیادی به دلیل پیاده‌سازی با Python بسیار سازگار و قابل‌حمل هستند. با این حال، چند مسئله در زمینهٔ سازگاری وجود دارد که ممکن است افراد ناآگاه را به دام بیندازد.

scons بسته به قابلیت‌های سیستم زیربنایی، با پسوند فایل بزرگ .C به‌طور متفاوتی رفتار می‌کند. در یک سیستم حساس به کوچک و بزرگی حروف مانند Linux یا UNIX، scons با فایلی دارای پسوند .C مانند یک فایل منبع C++ برخورد می‌کند. در یک سیستم غیرحساس به بزرگی و کوچکی حروف مانند Windows، scons با فایلی با پسوند .C مانند یک فایل منبع C رفتار می‌کند.

پسوندهای فایل‌های منبع هنگام کار با کدهای زبان 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 مجموعه‌ای از ابزارها و برنامه‌های کمکی را فراهم می‌کند که به کاربران امکان می‌دهد در یک سیستم ویندوز با استفاده از محیطی شبه-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 از طریق یک فایل دسته‌ای (batch file) واسط به نام scons.bat اجرا شود، (دست‌کم) دو پیامد به دنبال دارد. توجه داشته باشید که این حالت دیگر پیش‌فرض نیست - scons که از طریق نصاب pip مربوط به Python نصب شده باشد دارای یک scons.exe خواهد بود که این محدودیت‌ها را ندارد:

نخست، کاربران خط فرمان ویندوز که مایلند از تخصیص متغیر در خط فرمان استفاده کنند، ممکن است مجبور شوند تخصیص‌ها را داخل علامت‌های نقل‌قول دوتایی قرار دهند؛ در غیر این صورت پوسته خط فرمان ویندوز آن‌ها را به عنوان آرگومان‌های خودش مصرف می‌کند، نه آرگومان‌های scons:

scons "FOO=BAR" "BAZ=BLEH"

دوم، پوسته Cygwin تایپ کردن scons در اعلان خط فرمان را به عنوان اشاره به این فایل واسط تشخیص نمی‌دهد. می‌توانید با اجرای scons.bat (همراه با پسوند) از خط فرمان Cygwin، یا با ایجاد یک اسکریپت پوسته واسط به نام scons که scons.bat را فراخوانی می‌کند، این مشکل را برطرف نمایید.

دایرکتوری 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 ترجیح خواهد داد.

به‌طور کلی، 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 به مقدار فعلی تغییر یافت و محتویات آن گسترش پیدا کرد.


راهنمای کاربر 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
(برای جزئیات داخلی)

در ابتدا: Steven Knight knight@baldmt.com و Anthony Roach aroach@electriceyeball.com.

از ۲۰۱۰ تاکنون: The SCons Development Team scons-dev@python.org.

The SCons Development Team

حق نشر © 2001 - 2026 The SCons Foundation

1.
مشخصات LLVM
2.
JEP 313
https:openjdk.java.net/jeps/313
3.
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
5.
مستندات optparse
6.
اگر no_progress از طریق SetOption در یک فایل SConscript تنظیم شده باشد (اما نه در صورتی که در یک فایل site_init.py تنظیم شده باشد)، همچنان یک پیام وضعیت اولیه درباره خواندن فایل‌های SConscript نمایش داده خواهد شد، زیرا SCons باید خواندن آن‌ها را پیش از دیدن SetOption آغاز کند.
7.
http://www.opensource.org/licenses/alphabetical
8.
os.chmod
9.
در GitHub
<pubdate>Released Wed, 26 Aug 2026 21:18:42 -0700</pubdate> SCons 4.11.1 Version 4.11.