OCAMLC(1) General Commands Manual OCAMLC(1)

ocamlc - کامپایلر بایت‌کد OCaml

ocamlc [گزینه‌ها] filename...
ocamlc.opt [گزینه‌ها] filename...

کامپایلر بایت‌کد OCaml، ocamlc(1) فایل‌های منبع OCaml را به فایل‌های شیء بایت‌کد کامپایل کرده و این فایل‌های شیء را برای تولید فایل‌های اجرایی مستقل بایت‌کد پیوند می‌دهد. سپس این فایل‌های اجرایی توسط مفسر بایت‌کد ocamlrun(1) اجرا می‌شوند.

دستور ocamlc(1) دارای یک رابط خط فرمان مشابه بیشتر کامپایلرهای C است. این دستور چندین نوع آرگومان را می‌پذیرد و پس از پردازش تمام گزینه‌ها، آن‌ها را به ترتیب پردازش می‌کند:

•
آرگومان‌هایی که به .mli ختم می‌شوند به عنوان فایل‌های منبع برای رابط‌های واحد کامپایل در نظر گرفته می‌شوند. رابط‌ها نام‌های صادر شده توسط واحدهای کامپایل را مشخص می‌کنند: آن‌ها نام مقادیر را همراه با انواعشان اعلان می‌کنند، انواع داده عمومی را تعریف می‌کنند، انواع داده انتزاعی را اعلان می‌کنند و غیره. از فایل x.mli، کامپایلر ocamlc(1) یک رابط کامپایل‌شده در فایل x.cmi تولید می‌کند.
•
آرگومان‌هایی که به .ml ختم می‌شوند به عنوان فایل‌های منبع برای پیاده‌سازی‌های واحد کامپایل در نظر گرفته می‌شوند. پیاده‌سازی‌ها تعاریفی برای نام‌های صادر شده توسط واحد ارائه می‌دهند، و همچنین شامل عبارت‌هایی هستند که برای اثرات جانبی‌شان ارزیابی می‌شوند. از فایل x.ml، کامپایلر ocamlc(1) بایت‌کد شیء کامپایل‌شده را در فایل x.cmo تولید می‌کند.
اگر فایل رابط x.mli وجود داشته باشد، پیاده‌سازی x.ml در برابر رابط کامپایل‌شده متناظر x.cmi (که باید وجود داشته باشد) بررسی می‌شود. اگر هیچ رابط x.mli ارائه نشود، کامپایل x.ml علاوه بر فایل کد شیء کامپایل‌شده x.cmo، یک فایل رابط کامپایل‌شده x.cmi نیز تولید می‌کند. فایل x.cmi تولید شده متناظر با رابطی است که هر آنچه در پیاده‌سازی x.ml تعریف شده را صادر می‌کند.
•
آرگومان‌هایی که به .cmo ختم می‌شوند به عنوان بایت‌کد شیء کامپایل‌شده در نظر گرفته می‌شوند. این فایل‌ها به همراه فایل‌های شیء به‌دست‌آمده از کامپایل آرگومان‌های .ml (در صورت وجود) و کتابخانه استاندارد OCaml به یکدیگر پیوند داده می‌شوند تا یک برنامه اجرایی مستقل تولید کنند. ترتیبی که آرگومان‌های .cmo و .ml در خط فرمان ارائه می‌شوند مهم است: واحدهای کامپایل در زمان اجرا به همان ترتیب مقداردهی اولیه می‌شوند، و استفاده از مؤلفه یک واحد قبل از مقداردهی اولیه آن، خطای زمان پیوند محسوب می‌شود. بنابراین، یک فایل x.cmo داده‌شده باید قبل از تمام فایل‌های .cmo که به واحد x ارجاع دارند قرار گیرد.
•
آرگومان‌هایی که به .cma ختم می‌شوند به عنوان کتابخانه‌های بایت‌کد شیء در نظر گرفته می‌شوند. یک کتابخانه بایت‌کد شیء، مجموعه‌ای از فایل‌های بایت‌کد شیء (فایل‌های .cmo) را در یک تک‌فایل بسته‌بندی می‌کند. کتابخانه‌ها با ocamlc -a ساخته می‌شوند (توضیحات گزینه -a را در زیر ببینید). فایل‌های شیء موجود در کتابخانه مانند فایل‌های معمولی .cmo (به بالا مراجعه کنید)، به ترتیبی که هنگام ساخت فایل .cma مشخص شده بود، پیوند داده می‌شوند. تنها تفاوت این است که اگر یک فایل شیء موجود در کتابخانه در هیچ کجای برنامه ارجاع داده نشود، پیوند داده نخواهد شد.
•
آرگومان‌هایی که به .c ختم می‌شوند به کامپایلر C ارسال می‌شوند، که یک فایل شیء .o تولید می‌کند. این فایل شیء در صورت تنظیم بودن فلگ -custom با برنامه پیوند داده می‌شود (توضیحات -custom را در زیر ببینید).
•
آرگومان‌هایی که به .o یا .a ختم می‌شوند به عنوان فایل‌ها و کتابخانه‌های شیء C در نظر گرفته می‌شوند. هنگام پیوند در حالت -custom (توضیحات -custom را در زیر ببینید)، آن‌ها به پیونددهنده C ارسال می‌شوند.
•
آرگومان‌هایی که به .so ختم می‌شوند به عنوان کتابخانه‌های مشترک C (DLLها) در نظر گرفته می‌شوند. در طول پیوند، آن‌ها برای توابع خارجی C که از کد OCaml به آن‌ها ارجاع داده شده جستجو می‌شوند، و نام آن‌ها در فایل اجرایی بایت‌کد تولید شده نوشته می‌شود. سپس سیستم زمان اجرا ocamlrun(1) آن‌ها را در زمان شروع برنامه به صورت پویا بارگذاری می‌کند.

خروجی مرحله پیوند، فایلی شامل بایت‌کد کامپایل‌شده است که می‌تواند توسط مفسر بایت‌کد OCaml یعنی دستور ocamlrun(1) اجرا شود. اگر caml.out نام فایل تولید شده توسط مرحله پیوند باشد، دستور ocamlrun caml.out arg1 arg2 ... argn کد کامپایل‌شده موجود در caml.out را اجرا کرده و رشته‌های نویسه‌ای arg1 تا argn را به عنوان آرگومان به آن ارسال می‌کند. (برای جزئیات بیشتر به ocamlrun(1) مراجعه کنید.)

در بیشتر سیستم‌ها، فایل تولید شده توسط مرحله پیوند می‌تواند مستقیماً اجرا شود، مانند: ./caml.out arg1 arg2 ... argn. فایل تولید شده دارای بیت اجرایی تنظیم‌شده است، و موفق می‌شود مفسر بایت‌کد را خودبه‌خود راه‌اندازی کند.

دو نسخه از کامپایلر بایت‌کد وجود دارد: ocamlc.byte یک فایل اجرایی بایت‌کد است (یعنی با خود ocamlc(1) کامپایل شده است)، در حالی که ocamlc.opt یک فایل اجرایی بومی (یعنی با ocamlopt(1) کامپایل شده است). ocamlc.opt ممکن است در همه نصب‌های OCaml در دسترس نباشد. ocamlc یک نام مستعار برای سریع‌ترینِ این دو است؛ یعنی در صورت در دسترس بودن برای ocamlc.opt و در غیر این صورت برای ocamlc.byte.

گزینه‌های خط فرمان زیر توسط ocamlc(1) شناسایی می‌شوند.

ساخت یک کتابخانه (فایل .cma) با فایل‌های شیء (فایل‌های .cmo) مشخص‌شده در خط فرمان، به جای پیوند دادن آن‌ها در یک فایل اجرایی. نام کتابخانه باید با گزینه -o تعیین شود.
اگر گزینه‌های -custom، -cclib یا -ccopt در خط فرمان ارسال شوند، این گزینه‌ها در کتابخانه .cma حاصل ذخیره می‌شوند. سپس، پیوند دادن با این کتابخانه به طور خودکار گزینه‌های -custom، -cclib و -ccopt را طوری اضافه می‌کند که گویی در خط فرمان ارائه شده‌اند، مگر اینکه گزینه -noautolink داده شده باشد. علاوه بر این، زیررشته $CAMLORIGIN درون یک گزینه -ccopt با مسیر کامل به کتابخانه .cma، بدون نام فایل، جایگزین خواهد شد.
نمایش نام‌های مطلق فایل‌ها در پیام‌های خطا.
عدم تلاش برای نمایش نام‌های مطلق فایل‌ها در پیام‌های خطا.
از نسخه 4.11 منسوخ شده است. لطفاً به جای آن از -bin-annot استفاده کنید.
تخلیه اطلاعات دقیق درباره کامپایل (انواع، مقیدسازی‌ها، فراخوانی‌های دم و غیره) در قالب باینری. اطلاعات مربوط به فایل src.ml در فایل src.cmt قرار می‌گیرد. در صورت بروز خطای نوع، تمام اطلاعات استنتاج‌شده توسط بررسی‌کننده نوع قبل از خطا تخلیه می‌شود. فایل‌های حاشیه‌نویسی تولید شده توسط -bin-annot شامل اطلاعات بیشتری بوده و بسیار فشرده‌تر از فایل‌های تولید شده توسط -annot هستند.
فقط کامپایل کردن. مرحله پیوند کامپایل متوقف می‌شود. فایل‌های کد منبع به فایل‌های کامپایل‌شده تبدیل می‌شوند، اما هیچ فایل اجرایی تولید نمی‌شود. این گزینه برای کامپایل جداگانه ماژول‌ها مفید است.
استفاده از ccomp به عنوان پیونددهنده C هنگام پیوند در حالت "زمان اجرای سفارشی" (گزینه -custom را ببینید) و به عنوان کامپایلر C برای کامپایل فایل‌های منبع .c.
ارسال گزینه -llibname به پیونددهنده C هنگام پیوند در حالت "زمان اجرای سفارشی" (گزینه -custom را ببینید). این کار باعث پیوند کتابخانه C داده‌شده با برنامه می‌شود.
ارسال option داده‌شده به کامپایلر و پیونددهنده C، هنگام پیوند در حالت "زمان اجرای سفارشی" (گزینه -custom را ببینید). برای مثال، -ccopt -Ldir باعث می‌شود پیونددهنده C در دایرکتوری dir به دنبال کتابخانه‌های C بگردد.
فعال یا غیرفعال کردن رنگ‌ها در پیام‌های کامپایلر (به‌ویژه هشدارها و خطاها). حالت‌های زیر پشتیبانی می‌شوند:
استفاده از روش‌های اکتشافی برای فعال‌سازی رنگ‌ها تنها در صورتی که خروجی از آن‌ها پشتیبانی کند (یک ترمینال tty سازگار با ANSI)؛
فعال‌سازی بدون قید و شرط رنگ‌ها؛
غیرفعال کردن خروجی رنگی.
اگر -color ارائه نشده باشد، متغیر محیطی "OCAML_COLOR" در نظر گرفته می‌شود. مقادیر آن مانند بالا auto/always/never هستند.
اگر -color ارائه نشده باشد، "OCAML_COLOR" تنظیم نشده باشد و متغیر محیطی "NO_COLOR" تنظیم شده باشد، خروجی رنگی غیرفعال می‌شود. در غیر این صورت، تنظیمات پیش‌فرض auto است، و روش اکتشافی فعلی بررسی می‌کند که متغیر محیطی "TERM" وجود داشته و خالی یا "dumb" نباشد، و isatty(stderr) برقرار باشد.
کنترل نحوه چاپ پیام‌های خطا و هشدارها. حالت‌های زیر پشتیبانی می‌شوند:
فقط چاپ خطا و مکان آن؛
مشابه "short"، اما قطعه کد منبع متناظر با مکان خطا را نیز نمایش می‌دهد.
تنظیمات پیش‌فرض contextual است.
اگر -error-style ارائه نشود، متغیر محیطی "OCAML_ERROR_STYLE" در نظر گرفته می‌شود. مقادیر آن مانند بالا short/contextual است.
بررسی اینکه آیا فایل اجرایی بایت‌کد تولید شده می‌تواند روی پلتفرم‌های ۳۲ بیتی اجرا شود یا خیر، و در صورت عدم امکان، اعلام خطا می‌کند. این گزینه هنگام کامپایل بایت‌کد روی یک ماشین ۶۴ بیتی مفید است.
چاپ شماره نسخه ocamlc(1) و خلاصه‌ای دقیق از پیکربندی آن، سپس خروج.
چاپ مقدار یک متغیر پیکربندی خاص از خروجی -config، سپس خروج. اگر متغیر وجود نداشته باشد، کد خروج غیرصفر خواهد بود.
پیوند در حالت "زمان اجرای سفارشی" (custom runtime). در حالت پیوند پیش‌فرض، پیونددهنده بایت‌کدی تولید می‌کند که برای اجرا با سیستم زمان اجرای مشترک ocamlrun(1) در نظر گرفته شده است. در حالت زمان اجرای سفارشی، پیونددهنده یک فایل خروجی تولید می‌کند که هم شامل سیستم زمان اجرا و هم بایت‌کد برنامه است. فایل حاصل بزرگتر است، اما می‌تواند مستقیماً اجرا شود، حتی اگر دستور ocamlrun(1) نصب نشده باشد. علاوه بر این، حالت "زمان اجرای سفارشی" امکان پیوند کد OCaml با توابع C تعریف‌شده توسط کاربر را فراهم می‌کند.
هرگز از دستور strip(1) روی فایل‌های اجرایی تولید شده توسط ocamlc -custom استفاده نکنید، زیرا این کار بخش بایت‌کد فایل اجرایی را حذف می‌کند.
هشدار امنیتی: هرگز بیت‌های "setuid" یا "setgid" را روی فایل‌های اجرایی تولید شده توسط ocamlc -custom تنظیم نکنید، زیرا این کار آن‌ها را در برابر حملات آسیب‌پذیر می‌سازد.
محاسبه وابستگی‌ها، همانند کاری که ocamldep(1) انجام می‌دهد.
فراهم کردن ترتیبی برای بارگذاری پویای کتابخانه مشترک C با نام dlllibname.so توسط سیستم زمان اجرای ocamlrun(1) در زمان شروع برنامه.
مشابه -dllib اما نام ثبت‌شده در زمان شروع برنامه توسط ocamlrun(1) دستکاری (mangle) می‌شود. این گزینه برای کتابخانه‌های واسط C کاربرد دارد؛ این گزینه به‌ویژه توسط ocamlmklib -suffixed استفاده می‌شود.
افزودن دایرکتوری dir به مسیر جستجوی زمان اجرا برای کتابخانه‌های مشترک C. در زمان پیوند، کتابخانه‌های مشترک در مسیر جستجوی استاندارد (متناظر با گزینه -I ) جستجو می‌شوند. گزینه -dllpath صرفاً dir را در فایل اجرایی تولید شده ذخیره می‌کند، جایی که ocamlrun(1) می‌تواند آن را یافته و استفاده کند.
تولید یک فایل شیء (فایل .cmo) که می‌تواند بعداً به عنوان یک زیرماژول (با مسیر دسترسی داده‌شده) از یک واحد کامپایل ساخته‌شده با -pack گنجانده شود. برای مثال، ocamlc -for-pack P -c A.ml فایل a.cmo را تولید می‌کند که بعداً می‌تواند با ocamlc -pack -o P.cmo a.cmo استفاده شود. نکته: شما همچنان می‌توانید ماژولی را که بدون -for-pack کامپایل شده بسته‌بندی کنید، اما در این حالت استثناها با نام‌های نادرست چاپ خواهند شد.
افزودن اطلاعات اشکال‌زدایی هنگام کامپایل و پیوند. این گزینه برای اینکه بتوان برنامه را با ocamldebug(1) اشکال‌زدایی کرد و هنگام خاتمه برنامه با یک استثنای مهارنشده ردیابی پشته (backtrace) تولید نمود، الزامی است.
عدم ثبت اطلاعات اشکال‌زدایی (پیش‌فرض).
باعث می‌شود کامپایلر هنگام کامپایل یک پیاده‌سازی (فایل .ml)، تمام نام‌های تعریف‌شده را (همراه با انواع استنتاج‌شده یا تعاریفشان) چاپ کند. هیچ فایل کامپایل‌شده‌ای (فایل‌های .cmo و .cmi) تولید نمی‌شود. این کار می‌تواند برای بررسی انواع استنتاج‌شده توسط کامپایلر مفید باشد. همچنین، از آنجا که خروجی از نحو رابط‌ها پیروی می‌کند، می‌تواند در نوشتن یک رابط صریح (فایل .mli) برای یک فایل کمک کند: کافی است خروجی استاندارد کامپایلر را به یک فایل .mli هدایت کرده و آن فایل را ویرایش کنید تا تمام اعلان‌های نام‌های صادرنشده حذف شوند.
باعث می‌شود کامپایلر واریانس محاسبه‌شده پارامترهای نوع را برای هر اعلان نوع چاپ کند. بدون این گزینه، واریانس تنها برای انواع خصوصی یا انواع بدون تعریف صریح (مانند انواع انتزاعی) چاپ می‌شود.
بررسی نوع پیاده‌سازی منبع مورد کامپایل در برابر فایل رابط مشخص‌شده (جستجوی عادی فایل‌های .mli و .cmi را دور می‌زند).
افزودن دایرکتوری داده‌شده به فهرست دایرکتوری‌های جستجو شده برای فایل‌های رابط کامپایل‌شده (.cmi)، فایل‌های کد شیء کامپایل‌شده (.cmo)، کتابخانه‌ها (.cma)، و کتابخانه‌های C مشخص‌شده با -cclib -lxxx. به طور پیش‌فرض، ابتدا دایرکتوری جاری و سپس دایرکتوری کتابخانه استاندارد جستجو می‌شود. دایرکتوری‌های اضافه شده با -I پس از دایرکتوری جاری، به ترتیبی که در خط فرمان داده شده‌اند، اما قبل از دایرکتوری کتابخانه استاندارد جستجو می‌شوند. همچنین گزینه -nostdlib را ببینید.
اگر دایرکتوری داده‌شده با + شروع شود، نسبت به دایرکتوری کتابخانه استاندارد در نظر گرفته می‌شود. به عنوان مثال، -I +compiler-libs زیردایرکتوری compiler-libs از کتابخانه استاندارد را به مسیر جستجو اضافه می‌کند.
کامپایل فایل filename به عنوان یک فایل پیاده‌سازی، حتی اگر پسوند آن .ml نباشد.
کامپایل فایل filename به عنوان یک فایل رابط، حتی اگر پسوند آن .mli نباشد.
-intf-suffix string
شناسایی نام‌های فایل با پسوند string به عنوان فایل‌های رابط (به جای .mli پیش‌فرض).
نگه‌داشتن رشته‌های مستندات در فایل‌های .cmi تولید شده.
نگه‌داشتن مکان‌ها در فایل‌های .cmi تولید شده.
تنظیم کلمات کلیدی بر اساس مشخصات version+list.
این مشخصات با یک شماره نسخه اختیاری شروع می‌شود که مجموعه پایه کلمات کلیدی را تعریف می‌کند، و به دنبال آن فهرستی از کلمات کلیدی اضافی جدا شده با + می‌آید تا به این مجموعه پایه اضافه شوند. بدون شماره نسخه صریح، مجموعه پایه کلمات کلیدی، مجموعه کلمات کلیدی در نسخه فعلی OCaml است. کلمات کلیدی اضافی که با هیچ کلمه کلیدی شناخته‌شده‌ای در نسخه فعلی زبان مطابقت ندارند، در صورت وجود در کد منبع باعث ایجاد خطا می‌شوند.
برچسب‌ها در انواع نادیده گرفته نمی‌شوند، برچسب‌ها ممکن است در کاربردها استفاده شوند، و پارامترهای برچسب‌دار می‌توانند به هر ترتیبی داده شوند. این حالت پیش‌فرض است. گزینه -nolabels را لغو می‌کند.
سازوکار مورد استفاده توسط فایل‌های اجرایی بایت‌کد عادی برای یافتن مفسر را مشخص می‌کند. روش‌های زیر پشتیبانی می‌شوند:
یک راه‌انداز استاب اجرایی کوچک موجود در فایل runtime-launch-info به ابتدای تصویر بایت‌کد پیوست می‌شود.
از یک هدر #! استفاده می‌شود. اگر مسیر کامل به مفسر مورد نیاز برای یک خط #! مناسب نباشد، یک اسکریپت شل کوچک به جای آن تولید می‌شود که از مفسر sh موجود در PATH استفاده می‌کند.
/path/interpreter
مشابه sh، اما اگر مفسر نتواند در خط #! استفاده شود، به جای جستجوی sh در PATH از /path/interpreter استفاده می‌شود.
اجبار به پیوند دادن تمام ماژول‌های موجود در کتابخانه‌ها. اگر این فلگ داده نشود، ماژول‌های ارجاع‌نشده پیوند داده نمی‌شوند. هنگام ساخت یک کتابخانه (گزینه -a)، تنظیم گزینه -linkall تمام پیوندهای بعدی برنامه‌های مرتبط با آن کتابخانه را مجبور می‌کند تا تمام ماژول‌های موجود در کتابخانه را پیوند دهند. هنگام کامپایل یک ماژول (گزینه -c)، تنظیم گزینه -linkall تضمین می‌کند که این ماژول در صورت قرار گرفتن در یک کتابخانه و پیوند آن کتابخانه، همیشه پیوند داده خواهد شد.
ساخت یک سیستم زمان اجرای سفارشی (در فایل مشخص‌شده با گزینه -o) که فایل‌ها و کتابخانه‌های شیء C داده‌شده در خط فرمان را در خود ادغام می‌کند. این سیستم زمان اجرای سفارشی می‌تواند بعداً برای اجرای فایل‌های اجرایی بایت‌کد تولید شده با گزینه ocamlc -use-runtime runtime-name استفاده شود.
تنظیم تعداد سطرهای زمینه‌ای مورد استفاده در حین کامپایل تطبیق الگو. مقادیر کمتر باعث کامپایل سریع‌تر اما کدی با بهینه‌سازی کمتر می‌شوند. مقدار پیش‌فرض ۳۲ است.
عدم ثبت وابستگی‌ها برای نام‌های مستعار ماژول.
غیرفعال کردن رفتار کاربردی (applicative) فانکتورها. با این گزینه، هر بار اعمال فانکتور، انواع جدیدی در نتیجه خود تولید می‌کند و اعمال همان فانکتور دو بار روی یک آرگومان یکسان، دو ساختار ناسازگار ایجاد می‌کند.
عدم کامپایل بررسی‌های assertion. توجه داشته باشید که ساختار ویژه assert false همیشه کامپایل می‌شود زیرا دارای نوع‌بندی خاصی است. این فلگ هنگام پیوند فایل‌های از قبل کامپایل‌شده هیچ اثری ندارد.
هنگام پیوند کتابخانه‌های .cma، گزینه‌های -custom، -cclib و -ccopt احتمالاً موجود در کتابخانه‌ها را نادیده می‌گیرد (اگر این گزینه‌ها هنگام ساخت کتابخانه‌ها داده شده باشند). این گزینه می‌تواند زمانی مفید باشد که یک کتابخانه شامل مشخصات نادرست از کتابخانه‌های C یا گزینه‌های C باشد؛ در این حالت، هنگام پیوند، -noautolink را تنظیم کرده و کتابخانه‌ها و گزینه‌های صحیح C را در خط فرمان ارسال کنید.
نادیده گرفتن برچسب‌های غیر اختیاری در انواع. برچسب‌ها نمی‌توانند در کاربردها استفاده شوند، و ترتیب پارامترها سخت‌گیرانه می‌شود. همچنین گزینه -labels را ببینید.
عدم افزودن خودکار دایرکتوری کتابخانه استاندارد به فهرست دایرکتوری‌های جستجو شده برای فایل‌های رابط کامپایل‌شده (.cmi)، فایل‌های کد شیء کامپایل‌شده (.cmo)، کتابخانه‌ها (.cma)، و کتابخانه‌های C مشخص‌شده با -cclib -lxxx. همچنین گزینه -I را ببینید.
مشخص کردن نام فایل خروجی نهایی، خواه یک فایل اجرایی باشد، یک شیء کامپایل‌شده (گزینه -c)، یک کتابخانه (گزینه -a)، یک شیء بسته‌بندی‌شده (گزینه -pack)، یا یک فایل شیء یا منبع C (گزینه‌های -output-obj و -output-complete-obj ).
نام خروجی پیش‌فرض برای یک فایل اجرایی به پلتفرم بستگی دارد؛ در یونیکس a.out و در ویندوز camlprog.exe است.
این گزینه همچنین می‌تواند هنگام کامپایل بدون پیوند یک فایل رابط یا پیاده‌سازی (گزینه -c ) استفاده شود، که در این صورت نام فایل cmi یا cmo و همچنین نام واحد کامپایل را تا اولین نقطه به filename تنظیم می‌کند.
فایل‌های رابط کامپایل‌شده با این گزینه علامت‌گذاری می‌شوند تا سایر واحدهای کامپایل وابسته به آن، به هیچ‌یک از جزئیات پیاده‌سازی پیاده‌سازیِ کامپایل‌شده اتکا نکنند. کامپایلر بومی به فایل .cmx این واحد دسترسی نخواهد داشت -- و در صورت عدم وجود آن نیز هشداری نمی‌دهد. این می‌تواند سرعت کامپایل را چه برای ساخت اولیه و چه تدریجی، به قیمت کاهش کارایی کد تولید شده بهبود بخشد.
باز کردن ماژول داده‌شده قبل از پردازش فایل‌های رابط یا پیاده‌سازی. اگر چندین گزینه -open داده شود، آن‌ها به ترتیب پردازش می‌شوند، درست مانند اینکه عبارت‌های open! module1;; ... open! moduleN;; در بالای هر فایل اضافه شده باشند.
باعث می‌شود پیونددهنده به جای یک فایل اجرایی بایت‌کد، یک فایل شیء C تولید کند. این گزینه برای بسته‌بندی کد OCaml به عنوان یک کتابخانه C، قابل فراخوانی از هر برنامه C مفید است. نام فایل شیء خروجی باید با گزینه -o تعیین شود. این گزینه همچنین می‌تواند برای تولید یک فایل منبع C (با پسوند .c) یا یک کتابخانه مشترک/پویا کامپایل‌شده (با پسوند .so) استفاده شود.
مشابه -output-obj است، با این تفاوت که هنگام ایجاد یک فایل شیء، سیستم زمان اجرا و کتابخانه‌های پیوند خودکار را نیز شامل می‌شود.
ساخت یک فایل شیء بایت‌کد (فایل .cmo) و رابط کامپایل‌شده مرتبط با آن (.cmi) که فایل‌های شیء داده‌شده در خط فرمان را ترکیب کرده و آن‌ها را به صورت زیرماژول‌های فایل .cmo خروجی نشان می‌دهد. نام فایل .cmo خروجی باید با گزینه -o داده شود. به عنوان مثال، ocamlc -pack -o p.cmo a.cmo b.cmo c.cmo فایل‌های کامپایل‌شده p.cmo و p.cmi را تولید می‌کند که یک واحد کامپایل با سه زیرماژول A، B و C را توصیف می‌کنند، متناظر با محتویات فایل‌های شیء a.cmo، b.cmo و c.cmo. این محتویات می‌توانند در ادامه برنامه به صورت P.A، P.B و P.C ارجاع داده شوند.
فایل‌های شیء .cmo ترکیب‌شونده باید با گزینه مناسب -for-pack کامپایل شده باشند. در مثال بالا، a.cmo، b.cmo و c.cmo باید با ocamlc -for-pack P کامپایل شده باشند.
باعث می‌شود کامپایلر دستور command داده‌شده را به عنوان یک پیش‌پردازنده برای هر فایل منبع فراخوانی کند. خروجی command به یک فایل میانی هدایت می‌شود که سپس کامپایل می‌گردد. در صورت عدم وجود خطای کامپایل، فایل میانی بعداً حذف می‌شود.
پس از تجزیه، درخت نحو انتزاعی را از طریق پیش‌پردازنده command ارسال می‌کند. ماژول Ast_mapper(3) رابط خارجی یک پیش‌پردازنده را پیاده‌سازی می‌کند.
بررسی مسیر اطلاعات در حین بررسی نوع، برای اطمینان از اینکه همه انواع به شیوه‌ای اصلی استخراج شده‌اند. هنگام استفاده از آرگومان‌های برچسب‌دار و/یا متدهای چندریختی، این فلگ برای اطمینان از اینکه نسخه‌های آینده کامپایلر قادر به استنتاج صحیح انواع خواهند بود (حتی در صورت تغییر الگوریتم‌های داخلی) الزامی است. تمام برنامه‌های پذیرفته‌شده در حالت -principal در حالت پیش‌فرض نیز با انواع معادل اما با امضاهای باینری متفاوت پذیرفته می‌شوند، و این ممکن است بررسی نوع را کند کند؛ با این حال استفاده یک‌باره از آن قبل از انتشار کد منبع ایده خوبی است.
عدم بررسی اصلیت استنتاج نوع. این حالت پیش‌فرض است.
مجاز دانستن انواع بازگشتی دلخواه در حین بررسی نوع. به طور پیش‌فرض، فقط انواع بازگشتی که در آن‌ها بازگشت از طریق یک نوع شیء انجام می‌شود پشتیبانی می‌شوند. توجه داشته باشید که پس از ایجاد یک رابط با استفاده از این فلگ، باید دوباره از آن برای تمام وابستگی‌ها استفاده کنید.
عدم اجازه به انواع بازگشتی دلخواه در حین بررسی نوع. این حالت پیش‌فرض است.
کنترل اینکه آیا هدر استفاده شده توسط فایل‌های اجرایی بایت‌کد عادی مجاز به جستجوی مفسر است یا به مکان ثابتی نیاز دارد. روش‌های زیر پشتیبانی می‌شوند:
یک مسیر مطلق ثابت به مفسر استفاده می‌شود، و اگر مفسر در این مکان یافت نشود، فایل اجرایی راه‌اندازی نخواهد شد.
یک مسیر مطلق ثابت به مفسر استفاده می‌شود، اما اگر فایل اجرایی نتواند مفسر را در این مکان پیدا کند، ابتدا در دایرکتوری حاوی فایل اجرایی و سپس در PATH جستجو می‌کند.
فایل اجرایی مفسر را ابتدا در دایرکتوری حاوی فایل اجرایی و سپس در PATH جستجو می‌کند. هیچ مسیر مطلقی به مفسر ثبت نمی‌شود.
افزودن suffix به نام کتابخانه زمان اجرا که توسط برنامه استفاده خواهد شد. در صورتی که OCaml با آن‌ها پیکربندی شده باشد، زمان‌های اجرای اشکال‌زدایی (پسوند d ) و ابزار دقیق (پسوند i ) می‌توانند استفاده شوند.
اجبار به جداسازی بین انواع string و bytes، و در نتیجه فقط‌خواندنی کردن رشته‌ها. این حالت پیش‌فرض است.
عدم استفاده از اطلاعات نوع برای بهینه‌سازی تطبیق الگو. این امکان تشخیص شکست‌های تطبیق را فراهم می‌کند حتی اگر تطبیق الگو به اشتباه جامع فرض شده باشد. این مورد فقط بر کامپایل GADT و واریانت‌های چندریختی تأثیر می‌گذارد.
هنگام پیوند یک فایل اجرایی، مقدار پیش‌فرض را برای یک تنظیم زمان اجرا بازنویسی می‌کند. تنها تنظیم پشتیبانی‌شده فعلی عبارت است از:
مکان پیش‌فرض مورد استفاده توسط فایل اجرایی برای تعیین محل کتابخانه استاندارد را مشخص می‌کند. به طور پیش‌فرض، این مسیر مطلق به کتابخانه استانداردی است که خود کامپایلر با آن پیکربندی شده بود.
-short-paths
هنگامی که یک نوع تحت چندین مسیر ماژول قابل مشاهده است، هنگام چاپ نام نوع در رابط‌های استنتاج‌شده و پیام‌های خطا و هشدار از کوتاه‌ترین مسیر استفاده می‌کند.
توقف کامپایل پس از مرحله کامپایل داده‌شده. مراحل پشتیبانی‌شده فعلی عبارتند از: parsing، typing.
اجبار به اینکه بخش سمت چپ هر توالی دارای نوع unit باشد.
بخش سمت چپ یک توالی نیازی نیست که نوع unit داشته باشد. این حالت پیش‌فرض است.
هنگامی که یک نوع قابل خارج شدن از جعبه (unboxable) است (یعنی یک رکورد با یک آرگومان یا یک نوع داده مشخص با یک سازنده دارای یک آرگومان)، از جعبه خارج خواهد شد مگر اینکه با [@@ocaml.boxed] حاشیه‌نویسی شده باشد.
هنگامی که یک نوع قابل خارج شدن از جعبه است، در جعبه قرار می‌گیرد مگر اینکه با [@@ocaml.unboxed] حاشیه‌نویسی شده باشد. این حالت پیش‌فرض است.
غیرفعال کردن بررسی محدوده برای دسترسی به آرایه‌ها و رشته‌ها (ساختارهای v.(i) و s.[i] ). بنابراین برنامه‌های کامپایل‌شده با -unsafe کمی سریع‌تر هستند، اما ناامن‌اند: اگر برنامه به یک آرایه یا رشته خارج از محدوده‌اش دسترسی پیدا کند، هر اتفاقی ممکن است رخ دهد.
-unsafe-string
یکسان در نظر گرفتن انواع string و bytes، و در نتیجه قابل نوشتن کردن رشته‌ها. این گزینه برای سازگاری با کدهای منبع قدیمی در نظر گرفته شده و نباید با نرم‌افزارهای جدید استفاده شود.
تولید یک فایل اجرایی بایت‌کد که می‌تواند روی سیستم زمان اجرای سفارشی runtime-name اجرا شود، که قبلاً با ocamlc -make-runtime runtime-name ساخته شده است.
چاپ شماره نسخه کامپایلر و مکان دایرکتوری کتابخانه استاندارد، سپس خروج.
چاپ تمام دستورات خارجی قبل از اجرای آن‌ها، به‌ویژه فراخوانی‌های کامپایلر و پیونددهنده C در حالت -custom . برای اشکال‌زدایی مشکلات کتابخانه C مفید است.
چاپ شماره نسخه کامپایلر به شکل کوتاه (مانند "3.11.0")، سپس خروج.
فعال، غیرفعال یا مهلک علامت‌گذاری کردن هشدارهای مشخص‌شده توسط آرگومان warning-list.
هر هشدار می‌تواند فعال یا غیرفعال باشد، و هر هشدار می‌تواند مهلک یا غیرمهلک باشد. اگر هشداری غیرفعال باشد، نمایش داده نمی‌شود و به هیچ وجه بر کامپایل تأثیر نمی‌گذارد (حتی اگر مهلک باشد). اگر هشداری فعال باشد، هر زمان که کد منبع آن را ایجاد کند، به طور عادی توسط کامپایلر نمایش داده می‌شود. اگر فعال و مهلک باشد، کامپایلر همچنین پس از نمایش آن با یک خطا متوقف خواهد شد.
آرگومان warning-list یا یک مشخص‌کننده یادافزای هشدار است یا توالی‌ای از مشخص‌کننده‌های هشدار تک‌نویسه‌ای، بدون جداکننده بین آن‌ها. یک مشخص‌کننده یادافزای هشدار یکی از موارد زیر است:
+name
فعال‌سازی هشدار name.
-name
غیرفعال‌سازی هشدار name.
@name
فعال‌سازی و مهلک علامت‌گذاری کردن هشدار name.
یک مشخص‌کننده هشدار تک‌نویسه‌ای یکی از موارد زیر است:
+num
فعال‌سازی هشدار شماره num.
-num
غیرفعال‌سازی هشدار شماره num.
@num
فعال‌سازی و مهلک علامت‌گذاری کردن هشدار شماره num.
+num1..num2
فعال‌سازی تمام هشدارهای بین num1 و num2 (شامل خود آن‌ها).
-num1..num2
غیرفعال‌سازی تمام هشدارهای بین num1 و num2 (شامل خود آن‌ها).
@num1..num2
فعال‌سازی و مهلک علامت‌گذاری کردن تمام هشدارهای بین num1 و num2 (شامل خود آن‌ها).
+letter
فعال‌سازی مجموعه هشدارهای متناظر با letter. حرف ممکن است بزرگ یا کوچک باشد.
-letter
غیرفعال‌سازی مجموعه هشدارهای متناظر با letter. حرف ممکن است بزرگ یا کوچک باشد.
@letter
فعال‌سازی و مهلک علامت‌گذاری کردن مجموعه هشدارهای متناظر با letter. حرف ممکن است بزرگ یا کوچک باشد.
فعال‌سازی مجموعه هشدارهای متناظر با uppercase-letter.
غیرفعال‌سازی مجموعه هشدارهای متناظر با lowercase-letter.
شماره‌های هشدار و نام‌های یادافزا به صورت زیر هستند:
1 [comment-start]
علامت شروع کامنت مشکوک.
2 [comment-not-end]
علامت پایان کامنت مشکوک.
3
قابلیت منسوخ‌شده.
4 [fragile-match]
تطبیق الگوی شکننده: تطبیقی که حتی در صورت افزودن سازنده‌های اضافی به یکی از انواع واریانت تطبیق‌داده‌شده، کامل باقی خواهد ماند.
5 [ignored-partial-application]
تابع با اعمال جزئی: عبارتی که نتیجه آن از نوع تابع بوده و نادیده گرفته شده است.
6 [labels-omitted]
حذف برچسب در اعمال تابع.
7 [method-override]
بازنویسی متد بدون استفاده از کلمه کلیدی "method!".
8 [partial-match]
تطبیق جزئی: حالت‌های ناموجود در تطبیق الگو.
9 [missing-record-field-pattern]
فیلدهای ناموجود در یک الگوی رکورد.
10 [non-unit-statement]
عبارت در سمت چپ یک توالی که دارای نوع unit نیست (و یک تابع نیز نیست، هشدار شماره ۵ را ببینید).
11 [redundant-case]
مورد زائد در یک تطبیق الگو (حالت تطبیق استفاده‌نشده).
12 [redundant-subpat]
زیرالگوی زائد در یک تطبیق الگو.
13 [instance-variable-override]
بازنویسی یک متغیر نمونه.
14 [illegal-backslash]
اسکیپ بک‌اسلش غیرمجاز در یک ثابت رشته‌ای.
15 [implicit-public-methods]
متد خصوصی که به طور ضمنی عمومی شده است.
16 [unerasable-optional-argument]
آرگومان اختیاری حذف‌نشدنی.
17 [undeclared-virtual-method]
متد مجازی اعلان‌نشده.
18 [not-principal]
نوع غیر اصلی (غیر principal).
19 [non-principal-labels]
نوع بدون اصلیت.
20 [ignored-extra-argument]
آرگومان تابع استفاده‌نشده.
21 [nonreturning-statement]
دستور بدون بازگشت.
22 [preprocessor]
هشدار پیش‌پردازنده.
23 [useless-record-with]
بند with بی‌فایده در رکورد.
24 [bad-module-name]
نام ماژول نامعتبر: نام فایل منبع، یک نام ماژول معتبر OCaml نیست.
25
منسوخ‌شده: اکنون بخشی از هشدار ۸ است.
26 [unused-var]
متغیر استفاده‌نشده مشکوک: متغیر استفاده‌نشده‌ای که با let یا as , مقید شده و با یک نویسه زیرخط (_) شروع نمی‌شود.
27 [unused-var-strict]
متغیر استفاده‌نشده بی‌خطر: متغیر استفاده‌نشده‌ای که نه با let و نه با as , مقید شده و با یک نویسه زیرخط (_) شروع نمی‌شود.
28 [wildcard-arg-to-constant-constr]
یک الگو شامل یک سازنده ثابت است که روی الگوی زیرخط (_) اعمال شده است.
29 [eol-in-string]
یک پایان خط بدون اسکیپ در یک ثابت رشته‌ای یافت شد. این ممکن است باعث مشکلات قابلیت حمل بین یونیکس و ویندوز شود.
30 [duplicate-definitions]
دو برچسب یا سازنده هم‌نام در دو نوع متقابلاً بازگشتی تعریف شده‌اند.
31 [module-linked-twice]
یک ماژول دو بار در یک فایل اجرایی پیوند داده شده است.
32 [unused-value-declaration]
اعلان مقدار استفاده‌نشده.
33 [unused-open]
دستور open استفاده‌نشده.
34 [unused-type-declaration]
اعلان نوع استفاده‌نشده.
35 [unused-for-index]
اندیس حلقه for استفاده‌نشده.
36 [unused-ancestor]
متغیر نیاکان استفاده‌نشده.
37 [unused-constructor]
سازنده استفاده‌نشده.
38 [unused-extension]
سازنده افزونه استفاده‌نشده.
39 [unused-rec-flag]
فلگ rec استفاده‌نشده.
40 [name-out-of-scope]
نام سازنده یا برچسب خارج از محدوده استفاده شده است.
41 [ambiguous-name]
نام سازنده یا برچسب مبهم.
42 [disambiguated-name]
ابهام‌زدایی از نام سازنده یا برچسب.
43 [nonoptional-label]
برچسب غیر اختیاری به عنوان اختیاری اعمال شده است.
44 [open-shadow-identifier]
دستور open شناسه از قبل تعریف‌شده‌ای را سایه می‌اندازد.
45 [open-shadow-label-constructor]
دستور open برچسب یا سازنده از قبل تعریف‌شده‌ای را سایه می‌اندازد.
46 [bad-env-variable]
خطا در متغیر محیطی.
47 [attribute-payload]
بار داده‌ای صفت (attribute payload) غیرمجاز.
48 [eliminated-optional-arguments]
حذف ضمنی آرگومان‌های اختیاری.
49 [no-cmi-file]
فایل cmi ناموجود هنگام جستجوی نام مستعار ماژول.
50 [unexpected-docstring]
کامنت مستندسازی غیرمنتظره.
51 [wrong-tailcall-expectation]
فراخوانی تابع حاشیه‌نویسی‌شده با صفت نادرست @tailcall.
52 [fragile-literal-pattern]
الگوی ثابت شکننده.
53 [misplaced-attribute]
صفت نمی‌تواند در این زمینه ظاهر شود.
54 [duplicated-attribute]
صفت بیش از یک بار روی یک عبارت استفاده شده است.
55 [inlining-impossible]
درون‌خطی‌سازی ناممکن است.
56 [unreachable-case]
حالت غیرقابل دسترس در یک تطبیق الگو (بر اساس اطلاعات نوع).
57 [ambiguous-var-in-pattern-guard]
متغیرهای الگوی or مبهم تحت گارد.
58 [no-cmx-file]
فایل cmx ناموجود.
59 [flambda-assignment-to-non-mutable-value]
انتساب روی مقدار تغییرناپذیر.
60 [unused-module]
اعلان ماژول استفاده‌نشده.
61 [unboxable-type-in-prim-decl]
نوع خارج‌شدنی از جعبه بدون حاشیه‌نویسی در اعلان پایه (primitive).
62 [constraint-on-gadt]
قیود نوع روی اعلان نوع GADT.
63 [erroneous-printed-signature]
امضای چاپ‌شده نادرست.
64 [unsafe-array-syntax-without-parsing]
استفاده از -unsafe با یک پیش‌پردازنده که یک درخت نحو برمی‌گرداند.
65 [redefining-unit]
اعلان نوع که یک سازنده جدید '()' تعریف می‌کند.
66 [unused-open-bang]
دستور open! استفاده‌نشده.
67 [unused-functor-parameter]
پارامتر فانکتور استفاده‌نشده.
68 [match-on-mutable-state-prevent-uncurry]
تطبیق الگو وابسته به وضعیت تغییرپذیر مانع از uncurry شدن آرگومان‌های باقیمانده می‌شود.
69 [unused-field]
فیلد رکورد استفاده‌نشده.
70 [missing-mli]
فایل رابط ناموجود.
71 [unused-tmc-attribute]
صفت @tail_mod_cons استفاده‌نشده.
72 [tmc-breaks-tailcall]
یک فراخوانی دم توسط تبدیل @tail_mod_cons به یک فراخوانی غیر دم تبدیل می‌شود.
73 [generative-application-expects-unit]
یک فانکتور زایا به جای () روی یک ساختار خالی (struct end) اعمال شده است.
حروف نشان‌دهنده مجموعه‌های هشدارهای زیر هستند. هر حرفی که در اینجا ذکر نشده باشد متناظر با مجموعه تهی است.
همه هشدارها
1, 2
3
4
5
32, 33, 34, 35, 36, 37, 38, 39
6
7
8
9
10
11, 12
13
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 30
26
27
تنظیمات پیش‌فرض برابر است با -w +a-4-7-9-27-29-30-32..42-44-45-48-50-60-66..70-74. توجه داشته باشید که هشدارهای 5 و 10 بسته به سازوکارهای داخلی بررسی‌کننده نوع، همیشه صادر نمی‌شوند.
علامت‌گذاری هشدارهای مشخص‌شده در آرگومان warning-list به عنوان خطا. هنگامی که یکی از این هشدارها صادر شود، کامپایلر با یک خطا متوقف خواهد شد. warning-list دارای همان معنای گزینه -w است: یک علامت + (یا یک حرف بزرگ) هشدارهای متناظر را به عنوان مهلک علامت‌گذاری می‌کند، یک علامت - (یا یک حرف کوچک) آن‌ها را دوباره به هشدارهای غیرمهلک تبدیل می‌کند، و یک علامت @ هم هشدارهای متناظر را فعال کرده و هم آن‌ها را به عنوان مهلک علامت‌گذاری می‌کند.
نکته: استفاده از گزینه -warn-error در کدهای محیط عملیاتی توصیه نمی‌شود، زیرا تقریباً به طور قطع هنگام افزودن هشدارهای جدید یا اصلاح هشدارهای موجود در نسخه‌های بعدی OCaml، مانع کامپایل برنامه شما خواهد شد.
تنظیمات پیش‌فرض برابر است با -warn-error -a (هیچ هشداری مهلک نیست).
نمایش توضیحات تمام شماره‌های هشدار موجود.
چاپ مکان کتابخانه استاندارد، سپس خروج.
گنجاندن سیستم زمان اجرا در برنامه تولید شده. این حالت پیش‌فرض است.
کامپایلر سیستم زمان اجرا (یا ارجاعی به آن) را در برنامه تولید شده نمی‌گنجاند؛ این سیستم باید به طور جداگانه تأمین شود.
- file
پردازش file به عنوان نام فایل، حتی اگر با یک نویسه خط تیره (-) شروع شود.
نمایش یک خلاصه کوتاه از نحوه استفاده و خروج.

ocamlopt(1), ocamlrun(1), ocaml(1).
The OCaml user's manual, فصل "Batch compilation".