| CLANG(1) | Clang | CLANG(1) |
نام (NAME)
clang - کامپایلر زبانهای C، C++ و Objective-C
خلاصه دستور (SYNOPSIS)
clang [گزینهها] نام_فایل ...
توضیحات (DESCRIPTION)
clang یک کامپایلر برای زبانهای C، C++ و Objective-C است که مراحل پیشپردازش، تجزیه (parsing)، بهینهسازی، تولید کد، اسمبلی و پیوند (linking) را در بر میگیرد. بسته به اینکه کدام حالت سطحبالا تعیین شده باشد، Clang پیش از اجرای یک پیوند کامل متوقف خواهد شد. اگرچه Clang به صورت بسیار یکپارچه طراحی شده است، اما برای درک نحوه فراخوانی آن، شناخت مراحل کامپایل اهمیت دارد. این مراحل عبارتند از:
- راهانداز (Driver)
- فایل اجرایی clang در واقع یک راهانداز کوچک است که اجرای کلی سایر ابزارها مانند کامپایلر، اسمبلر و پیونددهنده را کنترل میکند. به طور معمول نیازی به تعامل مستقیم با این راهانداز ندارید، بلکه برای اجرای سایر ابزارها به صورت شفاف از آن استفاده میکنید.
- پیشپردازش (Preprocessing)
- این مرحله نشانهگذاری (tokenization) فایل منبع ورودی، بسط ماکروها، بسط #include و مدیریت سایر دستورات پیشپردازنده را بر عهده دارد. خروجی این مرحله معمولاً فایلی با پسوند ".i" (برای C)، ".ii" (برای C++)، ".mi" (برای Objective-C) یا ".mii" (برای Objective-C++) نامیده میشود.
- تجزیه و تحلیل معنایی (Parsing and Semantic Analysis)
- این مرحله فایل ورودی را تجزیه کرده و نشانههای پیشپردازنده را به یک درخت تجزیه تبدیل میکند. پس از تبدیل به شکل درخت تجزیه، تحلیل معنایی را برای محاسبه انواع داده در عبارتها و همچنین تعیین خوشساخت بودن کد اعمال مینماید. این مرحله مسئول ایجاد اکثر هشدارهای کامپایلر و همچنین خطاهای تجزیه است. خروجی این مرحله یک «درخت نحو انتزاعی» ("Abstract Syntax Tree" یا AST) است.
- تولید و بهینهسازی کد (Code Generation and Optimization)
- این مرحله AST
را به کد
واسط
سطحپایین
(معروف به "LLVM
IR") و در
نهایت به کد
ماشین
ترجمه
میکند. این
فاز مسئول
بهینهسازی
کد
تولیدشده و
مدیریت
تولید کد
مختص
معماری
مقصد است.
خروجی این
مرحله
معمولاً یک
فایل ".s" یا
فایل "assembly"
نامیده
میشود.
همچنین Clang از یک اسمبلر یکپارچه پشتیبانی میکند که در آن تولیدکننده کد مستقیماً فایلهای شیء را تولید میکند. این امر از سربار تولید فایل ".s" و فراخوانی اسمبلر مقصد جلوگیری مینماید.
- اسمبلر (Assembler)
- این مرحله اسمبلر مقصد را اجرا میکند تا خروجی کامپایلر را به یک فایل شیء مقصد تبدیل کند. خروجی این مرحله معمولاً یک فایل ".o" یا فایل "object" نامیده میشود.
- پیونددهنده (Linker)
- این مرحله پیونددهنده مقصد را اجرا میکند تا چندین فایل شیء را در یک فایل اجرایی یا کتابخانه پویا ادغام نماید. خروجی این مرحله معمولاً یک فایل "a.out"، ".dylib" یا ".so" نامیده میشود.
تحلیلگر ایستای Clang (Clang Static Analyzer)
تحلیلگر ایستای Clang ابزاری است که کد منبع را به منظور یافتن اشکالات (باگها) از طریق تحلیل کد پویش میکند. این ابزار از بخشهای متعددی از Clang استفاده میکند و درون همان راهانداز تعبیه شده است. لطفاً برای جزئیات بیشتر در مورد نحوه استفاده از این ابزار به https://clang-analyzer.llvm.org مراجعه کنید.
گزینهها (OPTIONS)
گزینههای انتخاب مرحله (Stage Selection Options)
- -E
- اجرای مرحله پیشپردازش.
- -fsyntax-only
- اجرای مراحل پیشپردازش، تجزیهکننده و تحلیل معنایی.
- -S
- اجرای مراحل پیشین بههمراه مراحل تولید و بهینهسازی LLVM و تولید کد مختص مقصد، که منجر به تولید یک فایل اسمبلی میشود.
- -c
- اجرای تمام مراحل فوق، به اضافه اسمبلر، جهت تولید فایل شیء مقصد ".o".
- بدون گزینه انتخاب مرحله (no stage selection option)
- در صورتی که هیچ گزینهای برای انتخاب مرحله تعیین نشود، تمام مراحل بالا اجرا شده و سپس پیونددهنده برای ترکیب نتایج در یک فایل اجرایی یا کتابخانه اشتراکی فراخوانی میشود.
- -x <language>
- فایلهای ورودی بعدی را از نوع language در نظر میگیرد.
- -std=<standard>
- استاندارد
زبانی را که
باید برای
آن کامپایل
شود مشخص
میکند.
مقادیر پشتیبانیشده برای زبان C عبارتاند از:
c89 c90 iso9899:1990
iso9899:199409
gnu89 gnu90
c99 iso9899:1999
gnu99
c11 iso9899:2011
gnu11
c17 iso9899:2017
gnu17
c23 iso9899:2024
gnu23
c2y
gnu2y
استاندارد پیشفرض زبان C مقدار gnu17 است، بهجز در PS4 که gnu99 است.
مقادیر پشتیبانیشده برای زبان C++ عبارتاند از:
c++98 c++03
gnu++98 gnu++03
c++11
gnu++11
c++14
gnu++14
c++17
gnu++17
c++20
gnu++20
c++23
gnu++23
c++2c
gnu++2c
استاندارد پیشفرض زبان C++ مقدار gnu++17 است.
مقادیر پشتیبانیشده برای زبان OpenCL عبارتاند از:
cl1.0
cl1.1
cl1.2
cl2.0
استاندارد پیشفرض زبان OpenCL مقدار cl1.0 است.
مقادیر پشتیبانیشده برای زبان CUDA عبارتاند از:
cuda
- -rtlib=<library>
- کتابخانه زمان اجرای کامپایلر (runtime library) مورد استفاده را مشخص میکند؛ گزینههای پشتیبانیشده libgcc و compiler-rt هستند. در صورت عدم تعیین، پیشفرض پلتفرم استفاده خواهد شد.
- -ansi
- مشابه -std=c89 است.
- -ObjC, -ObjC++
- با فایلهای ورودی منبع به ترتیب به عنوان ورودیهای Objective-C و Objective-C++ رفتار میکند.
- -trigraphs
- سهنگارهها (trigraphs) را فعال میکند.
- -ffreestanding
- مشخص میکند که فایل باید برای یک محیط مستقل (freestanding) و نه یک محیط میزبان (hosted) کامپایل شود. توجه داشته باشید که ساخت مستقل همچنان نیازمند پیوند دادن (link) با یک کتابخانه استاندارد C است که از رابطهای مستقل برای حالت زبان و محیط هدفِ مشخصشده پشتیبانی کند. این شامل توابعی مانند memcpy، memmove و memset است.
- -fno-builtin
- رفتار ویژه و بهینهسازیهای توابع شناختهشده کتابخانه، مانند strlen() و malloc() را غیرفعال میکند.
- -fno-builtin-<function>
- رفتار ویژه و بهینهسازیها را برای تابع مشخصی از کتابخانه غیرفعال میکند. برای مثال، -fno-builtin-strlen هرگونه رفتار ویژه برای تابع کتابخانهای strlen() را حذف میکند.
- -fno-builtin-std-<function>
- رفتار ویژه
و
بهینهسازیها
را برای
تابع مشخصی
از
کتابخانه
استاندارد
C++ در فضای
نام std
غیرفعال
میکند.
برای مثال،
-fno-builtin-std-move_if_noexcept
هرگونه
رفتار ویژه
برای تابع
کتابخانهای
std::move_if_noexcept() را حذف
میکند.
برای توابع کتابخانه استاندارد C که کتابخانه استاندارد C++ نیز آنها را در فضای نام std ارائه میدهد، به جای آن از -fno-builtin-<function> استفاده کنید.
- -fmath-errno
- مشخص میکند که باید با توابع ریاضی به گونهای رفتار شود که errno را بهروزرسانی کنند.
- -fpascal-strings
- پشتیبانی از رشتههای سبک پاسکال را با الگوی "\pfoo" فعال میکند.
- -fms-extensions
- پشتیبانی از افزونههای مایکروسافت (Microsoft extensions) را فعال میکند.
- -fmsc-version=
- مقدار _MSC_VER را تنظیم میکند. در ویندوز، پیشفرض این مقدار برابر با نسخه فعلیِ نصبشده از cl.exe، یا 1933 است. در غیر این صورت تنظیم نمیشود.
- -fborland-extensions
- پشتیبانی از افزونههای بورلند (Borland extensions) را فعال میکند.
- -fwritable-strings
- تمام رشتههای لیتِرال (string literals) را به طور پیشفرض قابل نوشتن قرار میدهد. این کار یکتاسازی رشتهها (uniquing) و سایر بهینهسازیها را غیرفعال میکند.
- -flax-vector-conversions, -flax-vector-conversions=<kind>, -fno-lax-vector-conversions
- قوانین آسانگیرانه بررسی نوع را برای تبدیلهای ضمنی بردارها مجاز میکند. مقادیر ممکن برای <kind>:
- none: هیچ تبدیل ضمنی بین بردارها مجاز نیست
- integer: تبدیلهای بیتی ضمنی (implicit bitcasts) بین بردارهای صحیحی که عرض بیت کل یکسانی دارند مجاز است
- all: تبدیلهای بیتی ضمنی بین هر بردارهایی با عرض بیت کل یکسان مجاز است
در صورت عدم تعیین، مقدار پیشفرض <kind> برابر با integer است.
- -fblocks
- ویژگی زبانی "Blocks" را فعال میکند.
- -fobjc-abi-version=version
- نسخه ABI مورد استفاده برای Objective-C را انتخاب میکند. نسخههای موجود عبارتند از 1 (ABI موروثی و شکننده "fragile")، 2 (ABI غیرشکننده 1)، و 3 (ABI غیرشکننده 2).
- -fobjc-nonfragile-abi-version=<version>
- نسخه ABI غیرشکننده Objective-C را برای استفاده به عنوان پیشفرض انتخاب میکند. این مقدار تنها زمانی به عنوان ABI زبان Objective-C استفاده خواهد شد که ABI غیرشکننده فعال باشد (خواه از طریق -fobjc-nonfragile-abi، یا به دلیل اینکه پیشفرض پلتفرم است).
- -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi
- استفاده از
ABI
غیرشکننده
Objective-C را فعال
میکند. در
پلتفرمهایی
که این
گزینه ABI
پیشفرض
است،
میتوان آن
را با -fno-objc-nonfragile-abi
غیرفعال
کرد.
Clang بهطور کامل و به عنوان بخشی ذاتی از معماری خود از کامپایل متقاطع (cross compilation) پشتیبانی میکند. بسته به نحوه پیکربندی نسخه Clang شما، ممکن است از چندین کامپایلر متقاطع پشتیبانی کند، یا فقط از یک هدف بومی (native) پشتیبانی نماید.
- -arch <architecture>
- معماری مد نظر برای ساخت را مشخص میکند (مختص Mac OS X).
- -target <architecture>
- معماری مد نظر برای ساخت را مشخص میکند (تمامی پلتفرمها).
- -mmacos-version-min=<version>
- هنگام ساخت برای macOS، حداقل نسخه پشتیبانیشده توسط برنامه شما را مشخص میکند.
- -miphoneos-version-min
- هنگام ساخت برای iPhone OS، حداقل نسخه پشتیبانیشده توسط برنامه شما را مشخص میکند.
- -دprint-supported-cpus
- فهرستی از پردازندههای پشتیبانیشده برای هدف دادهشده (که از طریق --target=<architecture> یا -arch <architecture> مشخص میشود) را چاپ میکند. اگر هیچ هدفی مشخص نشود، از هدف پیشفرض سیستم استفاده خواهد شد.
- -mcpu=?, -mtune=?
- به عنوان یک نام مستعار برای --print-supported-cpus عمل میکند.
- -mcpu=help, -mtune=help
- به عنوان یک نام مستعار برای --print-supported-cpus عمل میکند.
- -march=<cpu>
- مشخص میکند که Clang باید برای یک عضو خاص از خانواده پردازندهها و مدلهای پس از آن کد تولید کند. برای مثال، اگر -march=i486 را مشخص کنید، کامپایلر مجاز است دستورالعملهایی را تولید کند که روی i486 و پردازندههای پس از آن معتبر هستند، اما ممکن است در پردازندههای پیش از آن وجود نداشته باشند.
- --print-enabled-extensions
- فهرست افزونههایی (extensions) را که برای هدف تعیینشده توسط ترکیبی از مقادیر --target، -march و -mcpu فعال هستند، چاپ میکند. در حال حاضر، این گزینه تنها روی AArch64 و RISC-V پشتیبانی میشود. روی RISC-V، این گزینه همچنین رشته ISA افزونههای فعالشده را چاپ میکند.
- --print-supported-extensions
- فهرست تمام افزونههای پشتیبانیشده را برای هر پردازنده هدفِ یک معماری (که از طریق --target=<architecture> یا -arch <architecture> مشخص میشود) چاپ میکند. اگر هیچ هدفی مشخص نشود، از هدف پیشفرض سیستم استفاده خواهد شد. در حال حاضر، این گزینه فقط روی AArch64 و RISC-V پشتیبانی میشود.
گزینههای تولید کد (Code Generation Options)
- -O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4
- سطح بهینهسازی مورد استفاده را مشخص میکند:
-O1 جایی میان -O0 و -O2.
-O2 سطح متوسطی از بهینهسازی که اکثر بهینهسازیها را فعال میکند.
-O3 شبیه -O2، با این تفاوت که بهینهسازیهایی را فعال میکند که اجرای آنها زمان بیشتری میبرد یا ممکن است کدهای بزرگتری تولید کنند (به امید اینکه برنامه سریعتر اجرا شود).
-Ofast تمام بهینهسازیهای -O3 را به همراه بهینهسازیهای تهاجمی دیگری که ممکن است انطباق دقیق با استانداردهای زبان را نقض کنند فعال میکند. این گزینه در Clang 19 منسوخ شده است و هشداری صادر میشود مبنی بر اینکه اگر رفتار ریاضیاتی غیراستاندارد مد نظر است، باید از ترکیب -O3 با -ffast-math <#cmdoption-ffast-math> استفاده شود. هنوز زمانبندی مشخصی برای حذف آن وجود ندارد؛ هدف، جلوگیری از استفاده از -Ofast به دلیل رفتار غیرمنتظره یک پرچم بهینهسازی است که رفتار قابلمشاهده کد صحیح را تغییر میدهد.
-Os شبیه -O2 به همراه بهینهسازیهای اضافه جهت کاهش حجم کد.
-Oz شبیه -Os (و در نتیجه -O2)، اما حجم کد را بیش از پیش کاهش میدهد.
-Og مشابه -O1، اما با بهینهسازی اندکی کمتر و دیدپذیری بهتر متغیرها. همان بهینهسازیهای -O1 اجرا میشوند، اما پرچم -fextend-variable-liveness نیز تنظیم میشود که تلاش میکند از کاهش زندهبودن (liveness) متغیرهای کاربر توسط بهینهسازیها جلوگیری کرده و در دسترس بودن آنها را هنگام اشکالزدایی بهبود بخشد.
-O معادل -O1.
-O4 و بالاتر
- -g, -gline-tables-only, -gmodules
- خروجی اطلاعات اشکالزدایی را کنترل میکند. توجه داشته باشید که اطلاعات اشکالزدایی Clang در -O0 بهترین کارایی را دارد. هنگامی که بیش از یک گزینه شروعشونده با -g مشخص شود، آخرین گزینه اعمال خواهد شد:
-gline-tables-only فقط اطلاعات جدول خطوط اشکالزدایی را تولید میکند. این گزینه امکان ردیابی نمادین پشته (backtrace) با اطلاعات درونخطیسازی (inlining) را فراهم میآورد، اما شامل هیچ اطلاعاتی درباره متغیرها، مکانها یا انواع آنها نمیشود.
-gmodules اطلاعات اشکالزدایی را تولید میکند که حاوی ارجاعات خارجی به انواع تعریفشده در ماژولهای Clang یا هدرهای از پیش کامپایلشده (precompiled headers) است، بهجای اینکه اطلاعات تکراری انواع اشکالزدایی را در هر فایل شیء (object file) قرار دهد. این گزینه قالب ماژول Clang را بهطور شفاف به محفظههای فایل شیء تغییر میدهد که ماژول Clang را به همراه اطلاعات اشکالزدایی نگهداری میکنند. هنگام کامپایل برنامهای که از ماژولهای Clang یا هدرهای از پیش کامپایلشده استفاده میکند، این گزینه اطلاعات اشکالزدایی کامل را با زمانهای کامپایل سریعتر و فایلهای شیء بسیار کوچکتر تولید میکند.
این گزینه نباید هنگام ساخت کتابخانههای ایستا برای توزیع روی ماشینهای دیگر استفاده شود، زیرا اطلاعات اشکالزدایی حاوی ارجاعاتی به حافظه موقت (cache) ماژول در ماشینی خواهد بود که فایلهای شیء کتابخانه در آن ساخته شدهاند.
- -fstandalone-debug -fno-standalone-debug
- Clang از تعدادی
بهینهسازی
برای کاهش
حجم
اطلاعات
اشکالزدایی
در فایل
باینری
پشتیبانی
میکند. این
بهینهسازیها
بر اساس این
فرض کار
میکنند که
اطلاعات
نوعِ
اشکالزدایی
میتوانند
در چندین
واحد
کامپایل (compilation
units) پخش شوند.
به عنوان
مثال، Clang
تعاریف نوع
را برای
انواعی که
توسط یک
ماژول نیاز
نیستند و
میتوانند
با یک اعلان
رو به جلو (forward
declaration) جایگزین
شوند،
تولید
نخواهد کرد.
علاوه بر
این، Clang فقط
اطلاعات
نوع را برای
یک کلاس
پویای C++ در
ماژولی
صادر
میکند که
شامل vtable آن
کلاس باشد.
گزینه -fstandalone-debug این بهینهسازیها را خاموش میکند. این امر هنگام کار با کتابخانههای شخص ثالث که همراه با اطلاعات اشکالزدایی ارائه نمیشوند مفید است. این حالت در Darwin پیشفرض است. توجه داشته باشید که Clang هرگز اطلاعات نوع را برای انواعی که اصلاً توسط برنامه ارجاع داده نشدهاند، تولید نخواهد کرد.
- -feliminate-unused-debug-types
- بهطور پیشفرض، Clang اطلاعات نوع را برای انواعی که تعریف شده اما در برنامه استفاده نشدهاند تولید نمیکند. برای حفظ اطلاعات اشکالزدایی برای این انواع استفادهنشده، میتوان از نقیض آن یعنی -fno-eliminate-unused-debug-types استفاده کرد.
- -fexceptions
- امکان پرتاب استثناها (exceptions) از طریق قابهای پشته (stack frames) کامپایلشده با Clang را فراهم میکند (در بسیاری از اهداف، این پرچم اطلاعات بازپیچی پشته (unwind) را برای توابعی که ممکن است استثنا از طریق آنها پرتاب شود فعال میکند). برای بیشتر اهداف، این ویژگی بهطور پیشفرض برای C++ فعال است.
- -ftrapv
- کدی برای به دام انداختن خطاهای سرریز عدد صحیح (integer overflow) تولید میکند. سرریز عدد صحیح علامتدار در C رفتاری تعریفنشده (undefined) است. با این پرچم، کد اضافی تولید میشود تا این مورد را شناسایی کرده و هنگام رخ دادن آن، برنامه را متوقف کند (abort).
- -fvisibility
- این پرچم، سطح دیدپذیری (visibility) پیشفرض را تعیین میکند.
- -fcommon, -fno-common
- این پرچم مشخص میکند که متغیرهای فاقد مقداردهی اولیه، پیوند مشترک (common linkage) دریافت کنند. این رفتار را میتوان با -fno-common غیرفعال کرد.
- -flto, -flto=full, -flto=thin, -emit-llvm
- تولید
فایلهای
خروجی در
قالبهای
LLVM، مناسب
برای
بهینهسازی
زمان پیوند
(LTO). هنگامی که
همراه با -S
استفاده
شود،
فایلهای
اسمبلی
زبان میانی
LLVM را تولید
میکند؛ در
غیر این
صورت،
فایلهای
شیء با قالب
بیتکد LLVM
تولید
میشوند (که
ممکن است
بسته به
گزینههای
انتخاب
مرحله، به
پیونددهنده
ارسال
شوند).
مقدار پیشفرض برای -flto برابر "full" است که در آن بیتکد LLVM برای بهینهسازی یکپارچه زمان پیوند (LTO) مناسب است، بهطوری که پیونددهنده تمام چنین ماژولهایی را برای بهینهسازی در یک ماژول واحد ادغام میکند. با انتخاب "thin"، کامپایل با ThinLTO <> در عوض فراخوانی میشود.
نکته:
گزینههای گرداننده (Driver Options)
- -###
- چاپ (بدون اجرای) دستوراتی که برای این کامپایل باید اجرا شوند.
- --help
- نمایش گزینههای موجود.
- -Qunused-arguments
- عدم صدور هرگونه هشدار برای آرگومانهای استفادهنشدهی گرداننده.
- -Wa,<args>
- ارسال آرگومانهای جداشده با کاما در args به اسمبلر.
- -Wl,<args>
- ارسال آرگومانهای جداشده با کاما در args به پیونددهنده (linker).
- -Wp,<args>
- ارسال آرگومانهای جداشده با کاما در args به پیشپردازنده.
- -Xanalyzer <arg>
- ارسال arg به تحلیلگر ایستا.
- -Xassembler <arg>
- ارسال arg به اسمبلر.
- -Xlinker <arg>
- ارسال arg به پیونددهنده.
- -Xpreprocessor <arg>
- ارسال arg به پیشپردازنده.
- -o <file>
- نوشتن خروجی در file.
- -print-file-name=<file>
- چاپ مسیر کتابخانهای کامل مربوط به file.
- -print-libgcc-file-name
- چاپ مسیر کتابخانهای برای کتابخانه زمان اجرای کامپایلر که در حال حاضر استفاده میشود ("libgcc.a" یا "libclang_rt.builtins.*.a").
- -print-prog-name=<name>
- چاپ مسیر کامل برنامه name.
- -print-search-dirs
- چاپ مسیرهای استفادهشده برای یافتن کتابخانهها و برنامهها.
- -save-temps
- ذخیره نتایج میانی کامپایل.
- -save-stats, -save-stats=cwd, -save-stats=obj
- ذخیره آمار
داخلی
تولید کد (LLVM)
در فایلی در
دایرکتوری
جاری
(-save-stats/"-save-stats=cwd") یا
دایرکتوری
فایل خروجی
("-save-stats=obj").
همچنین میتوانید از متغیرهای محیطی برای کنترل گزارش آمار استفاده کنید. تنظیم CC_PRINT_INTERNAL_STAT به 1 این قابلیت را فعال میکند و گزارش در قالب JSON به خروجی استاندارد (stdout) ارسال میشود.
تنظیم CC_PRINT_INTERNAL_STAT_FILE به مسیر یک فایل، باعث میشود آمار در قالب JSON در فایل مشخصشده گزارش داده شود.
توجه داشته باشید که -save-stats بر CC_PRINT_INTERNAL_STAT و CC_PRINT_INTERNAL_STAT_FILE اولویت دارد.
- -integrated-as, -no-integrated-as
- به ترتیب برای فعال و غیرفعال کردن استفاده از اسمبلر یکپارچه استفاده میشود. این که اسمبلر یکپارچه به طور پیشفرض فعال باشد یا خیر، وابسته به معماری مقصد (target) است.
- -time
- اندازهگیری زمان اجرای دستورات به صورت مجزا.
- -ftime-report
- چاپ خلاصهای از زمانبندی هر مرحله از کامپایل.
- -v
- نمایش دستورات قابل اجرا و استفاده از خروجی با جزئیات (verbose).
- -fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length
- این گزینهها نحوه چاپ اطلاعات مربوط به پیامهای تشخیصی (خطاها و هشدارها) را توسط Clang کنترل میکنند. لطفاً برای اطلاعات بیشتر به راهنمای کاربر Clang (Clang User's Manual) مراجعه کنید.
گزینههای پیشپردازنده (Preprocessor Options)
- -D<macroname>=<value>
- یک دستور ضمنی #define را به بافر تعاریف اولیه اضافه میکند که پیش از پیشپردازش فایل مبدأ خوانده میشود.
- -U<macroname>
- یک دستور ضمنی #undef را به بافر تعاریف اولیه اضافه میکند که پیش از پیشپردازش فایل مبدأ خوانده میشود.
- -include <filename>
- یک دستور ضمنی #include را به بافر تعاریف اولیه اضافه میکند که پیش از پیشپردازش فایل مبدأ خوانده میشود.
- -I<directory>
- دایرکتوری مشخصشده را به مسیر جستجوی فایلهای include اضافه میکند.
- -F<directory>
- دایرکتوری مشخصشده را به مسیر جستجوی فایلهای include فریمورک اضافه میکند.
- -nostdinc
- دایرکتوریهای استاندارد سیستم یا دایرکتوریهای توکار کامپایلر را برای فایلهای include جستجو نمیکند.
- -nostdlibinc
- دایرکتوریهای استاندارد سیستم را برای فایلهای include جستجو نمیکند، اما دایرکتوریهای include توکار کامپایلر را جستجو میکند.
- -nobuiltininc
- دایرکتوری توکار clang را برای فایلهای include جستجو نمیکند.
- -nostdinc++
- دایرکتوری کتابخانه استاندارد C++ سیستم را برای فایلهای include جستجو نمیکند.
- -fkeep-system-includes
- تنها به
همراه -E
قابل
استفاده
است. محتوای
پیشپردازششده
سرآیندهای
"سیستمی"
را در خروجی
کپی
نمیکند؛
در عوض،
دستور #include را
حفظ میکند.
این امر
میتواند
حجم متن
تولیدشده
توسط -E را
تا حد زیادی
کاهش دهد که
هنگام تلاش
برای تولید
یک نمونه
آزمایشی
بازتولیدپذیر
و "کوچک"
میتواند
مفید باشد.
با این حال، این گزینه بازتولیدپذیری را تضمین نمیکند. اگر کد مبدأ فراخوانیکننده نمادهای پیشپردازندهای را تعریف کند که بر رفتار سرآیندهای سیستمی تأثیر میگذارند (برای مثال، _XOPEN_SOURCE)، عملکرد -E آن تعریف را حذف خواهد کرد و بنابراین میتواند معناشناسی سرآیند گنجاندهشده را تغییر دهد. همچنین، استفاده از نسخه متفاوتی از سرآیندهای سیستمی (بهویژه نسخه متفاوتی از STL) ممکن است به رفتاری متفاوت منجر شود. همیشه فایل پیشپردازششده را با کامپایل جداگانه آن اعتبارسنجی کنید.
محیط (ENVIRONMENT)
- TMPDIR, TEMP, TMP
- این متغیرهای محیطی، به ترتیب، برای یافتن مکانی جهت نوشتن فایلهای موقت مورد استفاده در طول فرآیند کامپایل بررسی میشوند.
- CPATH
- این متغیر محیطی مسیرهای جستجوی سرآیند اضافی (غیرسیستمی) را مشخص میکند که برای یافتن فایلهای سرآیند includeشده استفاده میشوند. این مسیرها پس از مسیرهای مشخصشده با گزینه -I<directory>، اما پیش از هرگونه مسیر جستجوی سرآیند سیستمی بررسی میشوند. مسیرها با جداکننده وابسته به پلتفرم، مانند آنچه در متغیر محیطی PATH استفاده میشود، تفکیک میگردند. ورودیهای خالی در فهرست مسیرهای تفکیکشده، از جمله موارد موجود در ابتدا یا انتهای فهرست، به عنوان دایرکتوری کاری فعلی کامپایلر در نظر گرفته میشوند.
- C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
- این متغیرهای محیطی مسیرهای جستجوی فایلهای سرآیند سیستمی اضافی را مشخص میکنند که هنگام پردازش زبان متناظر استفاده میشوند. مسیرهای جستجو مشابه متغیر محیطی CPATH تفکیک میشوند.
- MACOSX_DEPLOYMENT_TARGET
- اگر -mmacos-version-min مشخص نشده باشد، هدف استقرار (deployment target) پیشفرض از این متغیر محیطی خوانده میشود. این گزینه تنها بر اهداف Darwin تأثیر میگذارد.
گزارش باگها (BUGS)
برای گزارش باگها، لطفاً از <https://github.com/llvm/llvm-project/issues> بازدید کنید. اکثر گزارشهای باگ باید شامل فایلهای مبدأ پیشپردازششده (با استفاده از گزینه -E) و خروجی کامل کامپایلر، همراه با اطلاعات لازم برای بازتولید مشکل باشند.
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
نگهداریشده توسط تیم Clang / LLVM (http://clang.llvm.org)
کپیرایت و تکثیر (COPYRIGHT)
2007-2026, The Clang Team
| June 21, 2026 | 22 |