| TCC-DOC(1) | Tiny C Compiler | TCC-DOC(1) |
نام (NAME)
tcc - کامپایلر کوچک و سریع C
خلاصه دستور (SYNOPSIS)
کاربرد: tcc [options] [infile1 infile2...] [-run infile args...]
توضیحات (DESCRIPTION)
گزینههای TCC شباهت بسیار زیادی به گزینههای gcc دارند. تفاوت اصلی در این است که TCC میتواند برنامهٔ حاصل را مستقیماً اجرا کرده و آرگومانهای زمان اجرا را نیز به آن منتقل کند.
در ادامه چند مثال برای درک منطق کارکرد آورده شده است:
- "tcc -run a.c"
- کامپایل a.c و اجرای مستقیم آن
- "tcc -run a.c arg1"
- کامپایل a.c و اجرای مستقیم آن. مقدار arg1 به عنوان اولین آرگومان به تابع main() در a.c فرستاده میشود.
- "tcc a.c -run b.c arg1"
- کامپایل a.c و b.c، پیوند زدن آنها با یکدیگر و اجرای برنامه حاصل. مقدار arg1 به عنوان اولین آرگومان به تابع main() برنامهٔ حاصل داده میشود.
- "tcc -o myprog a.c b.c"
- کامپایل a.c و b.c، پیوند زدن آنها و تولید فایل اجرایی myprog.
- "tcc -o myprog a.o b.o"
- پیوند زدن a.o و b.o با یکدیگر و تولید فایل اجرایی myprog.
- "tcc -c a.c"
- کامپایل a.c و تولید فایل شیء (object file) a.o.
- "tcc -c asmfile.S"
- پیشپردازش با پیشپردازندهٔ C، اسمبل کردن asmfile.S و تولید فایل شیء asmfile.o.
- "tcc -c asmfile.s"
- اسمبل کردن (بدون پیشپردازش) asmfile.s و تولید فایل شیء asmfile.o.
- "tcc -r -o ab.o a.c b.c"
- کامپایل a.c و b.c، پیوند زدن آنها با یکدیگر و تولید فایل شیء ab.o.
اسکریپتنویسی:
از TCC میتوان درست همانند اسکریپتهای شل در اسکریپتها استفاده کرد. تنها کافی است "#!/usr/local/bin/tcc -run" را در ابتدای کد منبع C خود اضافه کنید:
#!/usr/local/bin/tcc -run
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
TCC میتواند در صورت استفاده از - به جای infile، کد منبع C را از ورودی استاندارد بخواند. مثال:
echo 'main(){puts("hello");}' | tcc -run -
- -c
-
تولید یک فایل شیء (object file).
- -o outfile
-
قرار دادن فایل شیء، فایل اجرایی، یا dll در فایل خروجی outfile.
- -run source [args...]
-
کامپایل فایل source و اجرای آن با آرگومانهای خط فرمان args. به منظور امکان ارسال بیش از یک آرگومان به یک اسکریپت، میتوان چندین گزینه TCC را پس از گزینه -run و با فاصله از هم مشخص کرد: tcc "-run -L/usr/X11R6/lib -lX11" ex4.cدر یک اسکریپت، سرآیند زیر را ایجاد میکند:
#!/usr/local/bin/tcc -run -L/usr/X11R6/lib -lX11
- -v
- نمایش نسخه TCC.
- -vv
- نمایش فایلهای گنجاندهشده (included). در صورت استفاده به عنوان تنها آرگومان، دایرکتوریهای جستجو را چاپ میکند. گزینه -vvv تلاشها را نیز نمایش میدهد.
- -bench
- نمایش آمار و اطلاعات کامپایل.
گزینههای پیشپردازنده:
- -Idir
- مشخص کردن
یک مسیر include
اضافی.
مسیرهای include
به ترتیبی
که مشخص
شدهاند
جستجو
میشوند.
مسیرهای include سیستمی همواره پس از آنها جستجو میشوند. مسیرهای پیشفرض include سیستم عبارتند از: /usr/local/include، /usr/include و PREFIX/lib/tcc/include. (PREFIX معمولاً /usr یا /usr/local است).
- -isystem dir
- مشخص کردن یک مسیر include سیستمی جهت افزودن به پیشفرضها.
- -nostdinc
- مسیرهای پیشفرض include سیستم جستجو نشوند؛ تنها مسیرهای include ارائهشده در خط فرمان جستجو شوند.
- -include file
- گنجاندن file در ابتدای هر فایل ورودی.
- -Dsym[=val]
- تعریف نماد پیشپردازنده sym با مقدار val. اگر val مشخص نشده باشد، مقدار آن 1 خواهد بود. ماکروهای تابعگونه را نیز میتوان تعریف کرد: -DF(a)=a+1
- -Usym
- حذف تعریف نماد پیشپردازنده sym.
- -E
- تنها پیشپردازش انجام شود، به stdout یا فایل (با -o).
- -P
- دستورات "#line" در خروجی نوشته نشوند.
- -P1
- نوشتن دستورات جایگزین "#line" در خروجی.
- -dD, -dM
- نوشتن دستورات "#define" در خروجی.
- -Wp,-opt
- مشابه -opt.
پرچمهای کامپایل:
نکته: هر یک از گزینههای زیر دارای یک فرم نقیض است که با -fno- شروع میشود.
- -funsigned-char
- نوع داده "char" بدون علامت (unsigned) باشد.
- -fsigned-char
- نوع داده "char" علامتدار (signed) باشد.
- -fno-common
- عدم تولید نمادهای مشترک (common symbols) برای دادههای مقداردهینشده.
- -fleading-underscore
- افزودن یک زیرخط (underscore) به ابتدای هر نماد C.
- -fms-extensions
- اجازه استفاده از افزونههای کامپایلر MS C به زبان. در حال حاضر فرض میشود اعلان یک ساختار تودرتوی دارای نام اما بدون شناسه، مانند یک ساختار بدون نام رفتار میکند.
- -fdollars-in-identifiers
- اجازه استفاده از علامت دلار ($) در شناسهها.
- -freverse-funcargs
- ارزیابی آرگومانهای تابع از راست به چپ.
- -fgnu89-inline
- "extern inline" مانند "static inline" رفتار کند.
- -fasynchronous-unwind-tables
- ایجاد بخش eh_frame [فعال]
- -ftest-coverage
- تولید کد پوشش آزمون (code coverage). پس از اجرای کد حاصل، فایلی به نام executable.tcov یا sofile.tcov حاوی پوشش کد تولید میشود.
گزینههای هشدار:
- -w
- غیرفعال کردن تمام هشدارها.
نکته: هر یک از گزینههای هشدار زیر دارای یک فرم نقیض است که با -Wno- شروع میشود.
- -Wimplicit-function-declaration
- هشدار در صورت اعلان ضمنی تابع (نبود پیشنمونه یا prototype).
- -Wdiscarded-qualifiers
- هشدار در صورت نادیده گرفته شدن یا حذف const.
- -Wunsupported
- هشدار درباره ویژگیهای پشتیبانینشده GCC که توسط TCC نادیده گرفته میشوند.
- -Wwrite-strings
- تنظیم نوع ثوابت رشتهای به صورت "const char *" به جای "char *".
- -Werror
- توقف کامپایل در صورت صدور هشدار. میتوان گزینهای برای فعال کردن هشدار مشخص و تبدیل آن به خطا تعیین کرد، به عنوان مثال -Werror=unsupported.
- -Wall
- فعالسازی برخی هشدارهای کاربردی (-Wimplicit-function-declaration، -Wdiscard-qualifiers).
گزینههای پیونددهنده:
- -Ldir
- مشخص کردن یک مسیر اضافی کتابخانه برای گزینه -l. مسیرهای پیشفرض کتابخانه عبارتند از /usr/local/lib، /usr/lib و /lib.
- -lxxx
- پیوند دادن برنامه با کتابخانه پویای libxxx.so یا کتابخانه ایستای libxxx.a. کتابخانه در مسیرهای مشخصشده توسط گزینه -L و متغیر LIBRARY_PATH جستجو میشود.
- -Bdir
- تعیین مسیری که کتابخانههای داخلی tcc (و فایلهای include) در آن یافت میشوند (پیشفرض PREFIX/lib/tcc است).
- تولید یک کتابخانه اشتراکی به جای یک فایل اجرایی.
- -soname name
- تنظیم نام کتابخانه اشتراکی برای استفاده در زمان اجرا.
- -static
- تولید یک فایل اجرایی با پیوند ایستا (پیشفرض، فایل اجرایی با پیوند اشتراکی است).
- -rdynamic
- صادر کردن نمادهای سراسری به پیونددهنده پویا. این گزینه زمانی مفید است که یک کتابخانه بازشده با dlopen() نیاز به دسترسی به نمادهای فایل اجرایی داشته باشد.
- -r
- تولید یک فایل شیء با ترکیب تمام فایلهای ورودی.
- -nostdlib
- عدم پیوند ضمنی با libc، فایلهای زمان اجرای C و libtcc1.
- -Wl,-nostdlib
- عدم جستجو در مسیرهای پیشفرض کتابخانهها (/usr/local/lib، /usr/lib و /lib). تنها مسیرهای مشخصشده با -L و LIBRARY_PATH جستجو میشوند.
- -Wl,-rpath=path
- قرار دادن مسیر جستجوی سفارشی کتابخانههای پویا در فایل اجرایی.
- -Wl,-Ipath
- -Wl,--dynamic-linker=path
- تنظیم مفسر ELF (پیونددهنده پویا). پیشفرض آن برابر مقدار متغیر محیطی LD_SO (در صورت تنظیم) یا مقدار پیشفرض داخلی است.
- -Wl,--enable-new-dtags
- هنگام قرار دادن مسیر جستجوی سفارشی کتابخانههای پویا در فایل اجرایی، ایجاد تگ پویای جدید ELF یعنی DT_RUNPATH به جای تگ قدیمی DT_RPATH..IP -Wl,--oformat=fmt 4 استفاده از fmt بهعنوان قالب خروجی. قالبهای خروجی پشتیبانیشده عبارتند از:
- "elf32-i386"
- قالب خروجی ELF (پیشفرض)
- "binary"
- تصویر باینری (تنها برای خروجی اجرایی)
- "coff"
- قالب خروجی COFF (تنها برای خروجی اجرایی مقصد TMS320C67xx)
- -Wl,--export-all-symbols
- -Wl,--export-dynamic
- برونریزی نمادهای سراسری به پیونددهندهٔ پویا (dynamic linker). این گزینه زمانی مفید است که یک کتابخانهٔ بازشده با dlopen() نیاز به دسترسی به نمادهای فایل اجرایی داشته باشد.
- -Wl,-subsystem=console/gui/wince/...
- تنظیم نوع برای فایلهای اجرایی PE (ویندوز).
- -Wl,-[Ttext=# | section-alignment=# | file-alignment=# | image-base=# | stack=#]
- تغییر چیدمان (layout) فایل اجرایی.
- -Wl,-Bsymbolic
- تنظیم برچسب DT_SYMBOLIC.
- -Wl,-(no-)whole-archive
- فعال/غیرفعال کردن پیوند دادن تمامی آبجکتها در آرشیوها.
گزینههای اشکالزدا (Debugger):
- -g
- تولید اطلاعات اشکالزدایی زمان اجرای stab تا پیامهای خطای زمان اجرای واضحتری دریافت کنید: " test.c:68: in function 'test5()': dereferencing invalid pointer" بهجای پیام مختصر و مبهم "Segmentation fault".
- -gdwarf[-x]
- تولید اطلاعات اشکالزدایی زمان اجرای dwarf بهجای اطلاعات اشکالزدایی stab.
- -b
- تولید کدهای پشتیبان اضافی برای بررسی تخصیصهای حافظه و محدودههای آرایه/اشارهگر. گزینهٔ -g بهطور ضمنی اعمال میشود.
- -bt[N]
- نمایش N
فراخواننده
در ردگیری
پشته (stack trace). این
گزینه
همراه با -g
یا -b مفید
است. هنگام
فعال بودن،
"__TCC_BACKTRACE__"
تعریف
میشود.
در فایلهای اجرایی، پشتیبانی مضاعف برای ردگیری پشته گنجانده شده است. تابع
" int tcc_backtrace(const char *fmt, ...); " ارائه شده است تا در صورت نیاز بتوان یک ردگیری پشته را به همراه یک پیام راهاندازی کرد.
گزینههای متفرقه:
- -std=version
- تعریف "__STDC_VERSION__": مقدار 201112 اگر version برابر با c11 یا gnu11 باشد؛ در غیر این صورت 199901.
- -x[c|a|b|n]
- مشخص کردن نوع محتوای فایل ورودی بعدی: بهترتیب C، اسمبلی (assembly)، باینری (binary)، یا هیچکدام (none).
- -O[n]
- مشابه با -D__OPTIMIZE__ بهجز برای -O0.
- -pthread
- پیشپردازش با -D_REENTRANT و پیوند با -lpthread.
- -M
- تنها خروجی دادن قطعهکد makefile شامل وابستگیها.
- -MM
- مشابه -M بهجز اینکه تنها فایلهای سرآیند کاربر را ذکر میکند، نه فایلهای سرآیند سیستم را.
- -MD
- تولید قطعهکد makefile به همراه وابستگیها.
- -MMD
- مشابه -MD بهجز اینکه تنها فایلهای سرآیند کاربر را ذکر میکند، نه فایلهای سرآیند سیستم را.
- -MF depfile
- استفاده از depfile بهعنوان خروجی برای -MD.
- -MP
- قید کردن تمامی وابستگیها بهعنوان هدف (target).
- -print-search-dirs
- چاپ دایرکتوری نصب پیکربندیشده و فهرستی از دایرکتوریهای کتابخانه و include که tcc در آنها جستجو خواهد کرد.
- -dumpversion
- چاپ نسخه.
- -dt
- همراه با -run/-E: تعریف خودکار ماکروهای 'test_...'
گزینههای ویژهٔ معماری مقصد (Target):
- -mms-bitfields
- استفاده از الگوریتمی برای تراز فیلدهای بیتی (bitfield) که با MSVC سازگار باشد. حالت پیشفرض الگوریتم gcc است.
- -mfloat-abi (ARM only)
- انتخاب ABI ممیز شناور. مقادیر ممکن: "softfp" و "hard"
- -mno-sse
- عدم استفاده از ثباتهای sse در معماری x86_64.
- -m32, -m64
- ارسال خط فرمان به کامپایلر متقاطع (cross compiler) i386/x86_64.
نکته: گزینههای GCC شامل -fx و -mx نادیده گرفته میشوند..SH "محیط (ENVIRONMENT)" متغیرهای محیطی که بر نحوه کارکرد tcc اثر میگذارند.
- CPATH
- C_INCLUDE_PATH
- فهرستی از دایرکتوریهای جداشده با دونقطه (:) که برای فایلهای include جستجو میشوند؛ دایرکتوریهایی که با -I مشخص شدهاند، ابتدا جستجو میشوند.
- LIBRARY_PATH
- فهرستی از دایرکتوریهای جداشده با دونقطه (:) که برای کتابخانههای مربوط به گزینهٔ -l جستجو میشوند؛ دایرکتوریهایی که با -L مشخص شدهاند، ابتدا جستجو میشوند.
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
Fabrice Bellard
| 2026-02-02 | 0.9.28rc |