M2(1) GNU M2(1)

gm2 - کامپایلر مبتنی بر GCC برای زبان برنامهنویسی مودولا-۲

برای هر فایل ورودی داده‌شده، پسوند نام فایل نوع کامپایل انجام‌شده را تعیین می‌کند. انواع پسوندهای نام فایل ورودی زیر پشتیبانی می‌شوند:

فایل‌های سورس برنامه یا پیاده‌سازی مودولا-۲. اگر مایل به کامپایل پروژه‌ای هستید که از پسوند فایل سورس دیگری استفاده می‌کند، گزینه -fmod= را ببینید.
فایل‌های سورس ماژول تعریف مودولا-۲. ماژول‌های تعریف به طور جداگانه کامپایل نمی‌شوند؛ در GNU Modula-2 ماژول‌های تعریف هنگام کامپایل ماژول‌های برنامه یا پیاده‌سازی در صورت نیاز تجزیه می‌شوند. اگر مایل به کامپایل پروژه‌ای هستید که از پسوند فایل سورس متفاوتی استفاده می‌کند، گزینه -fdef= را ببینید.

می‌توانید بیش از یک فایل ورودی را در خط فرمان gm2 مشخص کنید.

"-g"
تولید اطلاعات اشکال‌زدایی تا دیباگرهایی مانند gdb بتوانند فایل اجرایی را بررسی و کنترل کنند.
"-I"
برای تعیین مسیر جستجو جهت ماژول‌های تعریف و پیاده‌سازی استفاده می‌شود. به عنوان مثال: "gm2 -g -c -I.:../../libs foo.mod". اگر این گزینه مشخص نشود، مسیر پیش‌فرض اضافه می‌شود که شامل دایرکتوری جاری و به دنبال آن دایرکتوری‌های کتابخانه گویش مناسب زبان است.
"-fauto-init"
مقداردهی اولیه خودکار اشاره‌گرها به NIL را فعال می‌کند. هر زمان که بلوکی ایجاد شود، آدرس تمام اشاره‌گرهای تعریف‌شده در این دامنه با NIL مقداردهی می‌شود.
"-fbounds"
بررسی زمان اجرای زیردامنه، اندیس آرایه و ارجاع غیرمستقیم از طریق اشاره‌گر "NIL" را فعال می‌کند.
"-fcase"
بررسی زمان کامپایل را فعال می‌کند تا مشخص شود آیا یک دستور "CASE" در صورتی که بندی مشخص نشده باشد نیاز به بند "ELSE" دارد یا خیر.
"-fcpp"
پیش‌پردازش سورس با cpp -lang-asm -traditional-cpp. برای جزئیات بیشتر درباره این گزینه‌ها. اگر -fcpp داده شود، تمام ماژول‌های تعریف و پیاده‌سازی که تجزیه می‌شوند توسط cpp پیش‌پردازش خواهند شد.
"-fdebug-builtins"
فراخوانی یک تابع واقعی به جای معادل توکار آن. این می‌تواند برای اشکال‌زدایی مقادیر پارامترهای یک تابع توکار مفید باشد زیرا به کاربران امکان می‌دهد کد را به صورت گام‌به‌گام وارد یک تابع ذاتی کنند.
"-fdef="
پسوند مشخص‌شده را به عنوان نام فایل ماژول تعریف شناسایی می‌کند. پسوند پیش‌فرض نام فایل ماژول تعریف .def است. اگر این گزینه استفاده شود، در صورتی که ماژول تعریف درخواستی یافت نشود GNU Modula-2 همچنان به این پیش‌فرض رجوع خواهد کرد.
"-fdump-system-exports"
نمایش تمام آیتم‌های سیستمی درون‌ساخت. این یک گزینه خط فرمان داخلی است.
"-fexceptions"
کد مدیریت استثنا را فعال می‌کند. به طور پیش‌فرض این گزینه فعال است. مدیریت استثنا می‌تواند با -fno-exceptions غیرفعال شود و هیچ ارجاعی به کتابخانه‌های استثنای زمان اجرا ایجاد نخواهد شد.
"-fextended-opaque"
به انواع مات امکان می‌دهد به عنوان هر نوعی پیاده‌سازی شوند. این یک قابلیت توسعه‌یافته در GNU Modula-2 است و نیازمند آن است که ماژول پیاده‌سازی تعریف‌کننده نوع مات در دسترس باشد تا هنگام کامپایل ماژولی که نوع مات را وارد می‌کند قابل حل باشد.
"-ffloatvalue"
بررسی زمان اجرا را فعال می‌کند تا مشخص شود آیا یک عدد ممیز شناور در آستانه فراتر رفتن از محدوده است یا خیر.
"-fgen-module-list=filename"
تلاش برای یافتن تمام ماژول‌ها هنگام پیوندزدن و تولید یک فهرست ماژول. اگر filename برابر با - باشد، محتویات نوشته نمی‌شوند و تنها برای تحمیل پیوندزدن تمام سازنده‌های ماژول استفاده می‌شود. این گزینه در صورت فعال بودن -fuse-list= قابل استفاده نیست.
"-findex"
تولید کد برای بررسی خارج از محدوده بودن مقادیر اندیس آرایه. بررسی اندیس آرایه می‌تواند از طریق -fno-index غیرفعال شود.
"-fiso"
ویژگی‌های استاندارد ISO را فعال می‌کند. در حال حاضر این گزینه ماژول "SYSTEM" استاندارد ISO را فعال کرده و مسیر پیش‌فرض جستجوی کتابخانه را تغییر می‌دهد تا کتابخانه‌های ISO قبل از کتابخانه‌های PIM جستجو شوند. همچنین بر رفتار عملگرهای "DIV" و "MOD" تأثیر می‌گذارد.
"-flibs="
مسیر پیش‌فرض جستجوی کتابخانه را تغییر می‌دهد. کتابخانه‌های ارائه‌شده عبارتند از: m2pim، m2iso، m2min، m2log و m2cor. این‌ها به کتابخانه‌های پایه برنامه‌نویسی در مودولا-۲ (PIM)، کتابخانه‌های استاندارد ISO، پشتیبانی حداقل کتابخانه، کتابخانه سازگار با Logitech و برنامه‌نویسی در مودولا-۲ همراه با کوروتین‌ها نگاشت می‌شوند. چندین کتابخانه می‌توانند با کاما جدا شده و مشخص شوند که حق تقدم با اولین مورد در لیست است. اگر گزینه‌های -fpim، -fpim2، -fpim3، -fpim4 یا -fiso را مشخص کنید، نیازی به استفاده از -flibs=m2pim یا -flibs=m2iso نیست. مگر اینکه از -flibs=m2min استفاده کنید، باید m2pim را درج کنید زیرا ماژول‌های پایه‌ای را ارائه می‌دهد که تمام گویش‌های دیگر از آن استفاده می‌کنند. گزینه -fno-libs=- درایور gm2 را از تغییر مسیرهای جستجو و کتابخانه بازمی‌دارد.
"-static-libgm2"
در سیستم‌هایی که زمان‌های اجرای m2 را به هر دو صورت کتابخانه‌های مشترک و ایستا ارائه می‌دهند، این گزینه استفاده از نسخه ایستا را اجباری می‌کند.
"-fm2-debug-trace="
اشکال‌زدایی ردگیری را با استفاده از یک فهرست جداشده با کاما فعال می‌کند: line,token,quad,all. این یک گزینه خط فرمان داخلی است.
"-fm2-dump="
تخلیه نمایش داخلی ساختارهای داده مودولا-۲ را با استفاده از یک فهرست جداشده با کاما فعال می‌کند. این فهرست می‌تواند شامل موارد زیر باشد: quad,gimple,decl,all.
"-fm2-dump-decl=filestem"
نمایش مودولا-۲ یک نماد را در filestem مشخص‌شده تخلیه می‌کند. این گزینه تنها در صورتی عمل می‌کند که -fm2-dump-filter مشخص شده باشد.
"-fm2-dump-gimple=filestem"
نمایش gimple مودولا-۲ را در filestem مشخص‌شده تخلیه می‌کند.
"-fm2-dump-quad=filestem"
نمایش چهارگانه را در filestem مشخص‌شده تخلیه می‌کند.
"-fm2-dump-filter=rules"
تخلیه‌های زبان -fdump-lang-decl، -fdump-lang-gimple و -fdump-lang-quad را بر اساس rules فیلتر می‌کند. rules باید یک لیست جداشده با کاما باشد که می‌تواند سه شکل داشته باشد: نام متنی کامل تعریف یک رویه، [libname.]module.ident یا [filename:]module.ident. این یک گزینه خط فرمان داخلی است. در حال حاضر فقط روی نام رویه‌ها فیلتر می‌کند و تطبیق با عبارات منظم پیاده‌سازی نشده است. سه نمونه از کاربرد آن مطابق فرم‌های قبلی عبارتند از: "-fm2-dump-filter=_M2_hello_init"، "-fm2-dump-filter=m2pim.StrIO.WriteString" و "-fm2-dump-filter=StrLib.mod:StrIO.WriteString".
"-fm2-file-offset-bits="
نوع "SYSTEM.COFF_T" را مجبور می‌کند تا با تعداد بیت‌های مشخص‌شده ساخته شود. اگر این گزینه استفاده نشود، مقدار پیش‌فرض تعداد بیت‌های "CSSIZE_T" است.
"-fm2-g"
بهبود تجربه اشکال‌زدایی برای برنامه‌نویسان تازه به بهای تولید دستورالعمل‌های "nop" در صورت لزوم، جهت تضمین دقت پیمایش گام‌به‌گام بر روی تمام کلمات کلیدی مرتبط با کد. نمونه‌ای از این مورد در پایان دادن به فهرستی از دستورات تو در توی "IF" است که در آن چندین کلمه کلیدی "END" به دنباله‌ای از دستورالعمل‌های "nop" نگاشت می‌شوند.
"-fm2-lower-case"
نمایش کلمات کلیدی در پیام‌های خطا با حروف کوچک.
"-fm2-pathname="
تعیین نام پیشوند درهم‌ریخته ماژول برای تمام ماژول‌های موجود در مسیرهای include بعدی.
"-fm2-pathnameI"
فقط برای استفاده داخلی: توسط درایور برای کپی کردن گزینه کاربری -I استفاده می‌شود.
"-fm2-pathname-root=pathroot"
افزودن مسیرهای جستجوی مشتق‌شده از pathroot مشخص‌شده.
"-fm2-pathname-rootI"
فقط برای استفاده داخلی: توسط درایور برای کپی کردن هر گزینه کاربری -fm2-pathname-root= به ترتیب همراه با سایر گزینه‌های -I استفاده می‌شود.
"-fm2-plugin"
درج افزونه برای شناسایی خطاهای زمان اجرا در زمان کامپایل (به طور پیش‌فرض فعال است).
"-fm2-prefix="
تعیین نام پیشوند درهم‌ریخته ماژول. تمام نمادهای صادرشده از یک ماژول تعریف دارای این نام پیشوند خواهند بود.
"-fm2-statistics"
تولید اطلاعات چهارگانه: تعداد چهارگانه‌های تولیدشده، تعداد چهارگانه‌های باقی‌مانده پس از بهینه‌سازی و تعداد خطوط سورس کامپایل‌شده.
"-fm2-strict-type"
فلگ آزمایشی برای فعال کردن بررسی‌کننده نوع سخت‌گیرانه جدید.
"-fm2-strict-type-reason"
ارائه جزئیات بیشتر درباره علت ناسازگاری نوع‌ها.
"-fm2-whole-program"
کامپایل یک‌باره تمام ماژول‌های پیاده‌سازی و ماژول برنامه. توجه داشته باشید که در صورت کامپایل ماژول‌های گویش‌های مختلف (به‌ویژه با عملوندهای منفی در باقیمانده/پیمانه) باید دقت کنید. اما این گزینه، هنگامی که همراه با "-O3" به کار رود، می‌تواند بهبودهای عملکردی چشمگیری به همراه داشته باشد.
"-fmod="
پسوند مشخص‌شده را به عنوان نام فایل‌های ماژول و پیاده‌سازی شناسایی می‌کند. پسوند پیش‌فرض نام فایل ماژول و پیاده‌سازی .mod است. اگر این گزینه استفاده شود، در صورتی که GNU Modula-2 نیاز به خواندن یک ماژول پیاده‌سازی داشته باشد و نام فایل با پسوند مشخص‌شده وجود نداشته باشد، همچنان به این پیش‌فرض رجوع می‌کند.
"-fnil"
تولید کد برای تشخیص دسترسی به داده از طریق اشاره‌گر با مقدار "NIL". بررسی ارجاع‌زدایی از طریق یک اشاره‌گر "NIL" می‌تواند توسط -fno-nil غیرفعال شود.
"-fpim"
فعال کردن ویژگی‌های استاندارد PIM. در حال حاضر این گزینه ماژول "SYSTEM" در PIM را فعال کرده و مشخص می‌کند کدام شناسه‌ها فراگیر (تعریف‌شده در ماژول پایه) هستند. اگر سوییچ دیگری از -fpim[234] استفاده نشود، عملگرهای تقسیم و باقیمانده همانند تعریف PIM4 عمل می‌کنند.
"-fpim2"
فعال کردن ویژگی‌های استاندارد PIM-2. در حال حاضر این گزینه "SIZE" را از یک شناسه فراگیر (تعریف‌شده در ماژول پایه) خارج می‌کند و "SIZE" را در ماژول "SYSTEM" قرار می‌دهد. همچنین بر رفتار عملگرهای "DIV" و "MOD" تأثیر می‌گذارد.
"-fpim3"
فعال کردن ویژگی‌های استاندارد PIM-3. در حال حاضر این گزینه تنها بر رفتار عملگرهای "DIV" و "MOD" تأثیر می‌گذارد.
"-fpim4"
فعال کردن ویژگی‌های استاندارد PIM-4. در حال حاضر این گزینه تنها بر رفتار عملگرهای "DIV" و "MOD" تأثیر می‌گذارد.
"-fpositive-mod-floor-div"
عملگرهای "DIV" و "MOD" را مجبور می‌کند تا طبق تعریف PIM4 رفتار کنند. تمام نتایج باقیمانده مثبت بوده و نتایج حاصل از تقسیم به سمت پایین گرد می‌شوند.
"-fpthread"
پیوند دادن با کتابخانه pthread. این گزینه به طور پیش‌فرض فعال است. می‌توان آن را با -fno-pthread غیرفعال کرد. کامپایلر GNU Modula-2 از کتابخانه‌های pthread در GCC برای پیاده‌سازی کوروتین‌ها استفاده می‌کند (ماژول پیاده‌سازی SYSTEM را ببینید).
"-frange"
تولید کد برای بررسی محدوده انتساب، محدوده مقدار بازگشتی، محدوده مجموعه و محدوده سازنده. بررسی محدوده می‌تواند از طریق -fno-range غیرفعال شود.
"-freturn"
تولید کد برای بررسی اینکه توابع همواره با یک "RETURN" خارج شوند و در پایان بدون بازگشت رها نشوند. بررسی بازگشت می‌تواند از طریق -fno-return غیرفعال شود.
"-fruntime-modules="
تعیین ماژول‌های زمان اجرا و ترتیب آن‌ها با استفاده از یک لیست جداشده با کاما. این ماژول‌ها پیش از هر ماژول دیگری در وابستگی‌های برنامه مقداردهی اولیه می‌شوند. به طور پیش‌فرض، لیست ماژول‌های زمان اجرا روی "m2iso:RTentity,m2iso:Storage,m2iso:SYSTEM," "m2iso:M2RTS,m2iso:RTExceptions,m2iso:IOLink" تنظیم شده است. توجه داشته باشید که این ماژول‌ها تنها در صورت نیاز به فایل اجرایی شما پیوند داده خواهند شد. افزودن فهرستی طولانی از ماژول‌های وابسته تأثیری بر حجم فایل اجرایی ندارد و تنها در صورت نیاز، ترتیب مقداردهی اولیه را مشخص می‌کند.
"-fscaffold-dynamic"
این گزینه تضمین می‌کند که gm2 هنگام کامپایل ماژول‌های پیاده‌سازی و برنامه، یک زیرساخت داربست پویا تولید کند. به طور پیش‌فرض این گزینه فعال است. برای خاموش کردن آن از -fno-scaffold-dynamic استفاده کنید یا -fno-scaffold-static را انتخاب نمایید.
"-fscaffold-c"
تولید یک داربست سورس C برای ماژول جاری که کامپایل می‌شود.
"-fscaffold-c++"
تولید یک داربست سورس C++ برای ماژول جاری که کامپایل می‌شود.
"-fscaffold-main"
اجبار به تولید تابع main. اگر -c حذف شده باشد این مورد ضروری نیست.
"-fscaffold-static"
این گزینه تضمین می‌کند که gm2 یک داربست ایستا درون ماژول برنامه ایجاد کند. داربست ایستا شامل دنباله‌ای از فراخوانی‌ها به تمام رویه‌های مقداردهی اولیه و نهایی‌سازی ماژول‌های وابسته است. داربست ایستا برای اشکال‌زدایی و پیمایش گام‌به‌گام بلوک‌های مقداردهی اولیه ماژول‌های پیاده‌سازی مفید است.
"-fshared"
تولید یک کتابخانه مشترک از ماژول.
"-fsoft-check-all"
تمام بررسی‌های زمان اجرا را فعال می‌کند. این معادل فراخوانی GNU Modula-2 با استفاده از گزینه‌های دستوری زیر است: "-fnil" "-frange" "-findex" "-fwholevalue" "-fwholediv" "-fcase" "-freturn".
"-fsources"
مسیر سورس هر ماژول را نمایش می‌دهد. این گزینه می‌تواند در زمان کامپایل برای اطمینان از استفاده شدن ماژول تعریف صحیح به کار رود.
"-fswig"
تولید یک فایل رابط swig.
"-funbounded-by-reference"
بهینه‌سازی پارامترهای نامحدود را با تلاش برای ارسال پارامترهای نامحدود غیر "VAR" از طریق مرجع فعال می‌کند. این بهینه‌سازی از کپی ضمنی درون رویه فراخوانده‌شده جلوگیری می‌کند. کامپایلر GNU Modula-2 تنها در صورتی اجازه می‌دهد پارامترهای نامحدود از طریق مرجع ارسال شوند که در داخل رویه فراخوانده‌شده، روی آن‌ها نوشته نشود، هیچ آدرسی روی آرایه محاسبه نشود و به عنوان یک پارامتر "VAR" ارسال نشود. توجه داشته باشید که نوشتن کدی برای برهم زدن این بهینه‌سازی ممکن است، بنابراین این گزینه باید با احتیاط استفاده شود. برای مثال، گرفتن آدرس یک آرایه، ارسال آدرس و آرایه به یک رویه، خواندن از آرایه درون رویه و نوشتن در آن مکان با استفاده از پارامتر آدرس امکان‌پذیر است.

به دلیل ماهیت پرخطر این گزینه، در صورت مشخص شدن گزینه -O فعال نمی‌شود.

"-fuse-list=filename"
اگر -fscaffold-static فعال باشد، از فایل filename برای ترتیب مقداردهی اولیه ماژول‌ها استفاده می‌کند؛ در حالی که اگر -fscaffold-dynamic فعال باشد، از این فایل برای تحمیل پیوندزدن تمام سازنده‌های ماژول استفاده خواهد شد. این گزینه در صورت فعال بودن -fgen-module-list= قابل استفاده نیست.
"-fwholediv"
تولید کد برای تشخیص تقسیم بر صفر یا باقیمانده بر صفر اعداد صحیح.
"-fwholevalue"
تولید کد برای تشخیص سرریز و زیرریز اعداد صحیح.
"-Wcase-enum"
اگر یک دستور "CASE" بر اساس یک عبارت از نوع شمارشی انتخاب کند و دستور فاقد یک یا چند برچسب "CASE" باشد، یک هشدار صادر می‌کند. اگر دستور "CASE" دارای بند پیش‌فرض "ELSE" باشد هیچ هشداری صادر نمی‌شود. گزینه -Wall این فلگ را فعال می‌کند.
"-Wuninit-variable-checking"
اگر یک متغیر پیش از مقداردهی اولیه استفاده شود، هشدار صادر می‌کند. این بررسی فقط در اولین بلوک پایه در هر رویه رخ می‌دهد. پارامترها، انواع آرایه یا انواع مجموعه را بررسی نمی‌کند.
"-Wuninit-variable-checking=all,known,cond"
اگر یک متغیر پیش از مقداردهی اولیه استفاده شود، هشدار صادر می‌کند. در صورت مشخص شدن known، بررسی تنها در اولین بلوک پایه در هر رویه رخ می‌دهد. اگر cond یا all مشخص شود، بررسی در شاخه‌های شرطی گراف جریان ادامه می‌یابد. هنگام فراخوانی یک رویه یا مواجهه با ابتدای یک حلقه، تمام بررسی‌ها متوقف می‌شوند. گزینه -Wall این فلگ را همراه با -Wuninit-variable-checking=known فعال خواهد کرد. استفاده از -Wuninit-variable-checking=all زمان کامپایل را افزایش خواهد داد.
"-fwideset"
دسترسی به ماژول کتابخانه پشتیبانی زمان اجرای M2WIDESET را فعال می‌کند. این گزینه به طور پیش‌فرض فعال است. امکان wideset می‌تواند با -fno-wideset غیرفعال شود و هیچ ارجاعی به کتابخانه زمان اجرای M2WIDESET ایجاد نخواهد شد.

gpl(7), gfdl(7), fsf-funding(7), gcc(1) و مدخل‌های Info برای gm2 و gcc.

Copyright (c) 1999-2026 Free Software Foundation, Inc.

مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. یک نسخه از این مجوز در صفحه راهنمای gfdl(7) گنجانده شده است.

2026-08-10 gcc-16