| MAKE(1) | User Commands | MAKE(1) |
نام (NAME)
make - ابزار GNU Make برای مدیریت و نگهداری مجموعهای از برنامهها
خلاصه دستور (SYNOPSIS)
make [OPTION]... [TARGET]...
توضیحات (DESCRIPTION)
ابزار make بهطور خودکار مشخص میکند کدام بخشهای یک برنامه بزرگ باید مجدداً کامپایل شوند، و دستورات لازم برای کامپایل مجدد آنها را صادر میکند. این راهنما، پیادهسازی GNU از make را شرح میدهد که توسط Richard Stallman و Roland McGrath نوشته شده و در حال حاضر توسط Paul Smith نگهداری میشود. مثالهای ما برنامههای C را نشان میدهند زیرا بسیار متداول هستند، اما میتوانید از make برای هر زبان برنامهنویسی که کامپایلر آن با یک دستور شل قابل اجرا باشد، استفاده کنید. در واقع، make تنها به برنامهها محدود نمیشود؛ میتوانید از آن برای توصیف هر وظیفهای که در آن باید پروندههایی با تغییر پروندههای دیگر بهطور خودکار بهروزرسانی شوند، استفاده کنید.
برای آمادهسازی جهت استفاده از make، باید فایلی به نام makefile بنویسید که روابط میان فایلهای برنامه شما را توصیف کرده و دستوراتی را برای بهروزرسانی هر فایل ارائه دهد. در یک برنامه، معمولاً فایل اجرایی از روی فایلهای شیء (object files) بهروزرسانی میشود که آنها نیز به نوبه خود از کامپایل فایلهای منبع ساخته شدهاند.
هنگامی که یک makefile مناسب ایجاد شد، هر بار که برخی فایلهای منبع را تغییر میدهید، اجرای این دستور ساده شل:
برای انجام تمام کامپایلهای مجددِ لازم کافی است. برنامه make از توضیحات makefile و زمان آخرین تغییر فایلها استفاده میکند تا تصمیم بگیرد کدام فایلها نیاز به بهروزرسانی دارند. برای هر یک از آن فایلها، دستورات ثبتشده در makefile را اجرا میکند.
make دستورات موجود در makefile را برای بهروزرسانی یک یا چند target، اجرا میکند که در آن معمولاً هر target یک برنامه است. اگر گزینه -f داده نشده باشد، make به دنبال makefileهای GNUmakefile، makefile، و Makefile، به همین ترتیب خواهد گشت.
بهطور معمول باید makefile خود را makefile یا Makefile بنامید. (ما Makefile را پیشنهاد میکنیم، زیرا در ابتدای فهرست دایرکتوری، درست در کنار سایر فایلهای مهم مانند README بهخوبی نمایان میشود.) نخستین نامی که بررسی میشود، یعنی GNUmakefile، برای بیشتر makefileها توصیه نمیشود. تنها زمانی باید از این نام استفاده کنید که makefile شما مختص GNU Make باشد و توسط سایر نسخههای make پشتیبانی نشود. اگر makefile برابر '-' باشد، ورودی استاندارد خوانده میشود.
make یک target را در صورتی بهروزرسانی میکند که به فایلهای پیشنیازی وابسته باشد که از زمان آخرین تغییر target اصلاح شدهاند، یا اگر target اصلاً وجود نداشته باشد.
گزینهها (OPTIONS)
- -b, -m
- این گزینهها برای سازگاری با سایر نسخههای make نادیده گرفته میشوند.
- -B, --always-make
- ساخت بدون قید و شرط تمامی هدفها.
- -C dir, --directory=dir
- تغییر به پوشهٔ dir پیش از خواندن makefileها یا انجام هر کار دیگر. اگر چندین گزینهٔ -C مشخص شده باشد، هر یک نسبت به مورد پیشین تفسیر میشود: -C / -C etc معادل است با -C /etc. این معمولاً در فراخوانیهای بازگشتی make استفاده میشود.
- -d
- چاپ اطلاعات اشکالزدایی افزون بر پردازش عادی. اطلاعات اشکالزدایی مشخص میکند که چه فایلهایی برای بازسازی در نظر گرفته شدهاند، زمان کدام فایلها و با چه نتایجی مقایسه میشود، کدام فایلها واقعاً نیاز به بازسازی دارند، کدام قواعد ضمنی بررسی شده و کدامیک اعمال میشوند---همهٔ موارد جالب دربارهٔ نحوهٔ تصمیمگیری make برای اینکه چه کاری انجام دهد.
- --debug[=FLAGS]
- چاپ اطلاعات اشکالزدایی افزون بر پردازش عادی. اگر FLAGS مشخص نشود، رفتار برنامه همانند حالتی است که -d تعیین شده باشد. FLAGS میتواند شامل هر یک یا تمام نامهای زیر باشد که با کاما یا فاصله از هم جدا شدهاند. تنها نخستین نویسه دارای اهمیت است: باقی را میتوان حذف کرد: all برای تمام خروجیهای اشکالزدایی (همانند استفاده از -d)، basic برای اشکالزدایی پایه، verbose برای اشکالزدایی پایه با جزئیات بیشتر، implicit برای نمایش عملیات جستجوی قواعد ضمنی، jobs برای جزئیات فراخوانی دستورها، makefile برای اشکالزدایی هنگام ساخت مجدد makefileها، print تمام دستورالعملهای اجراشده را نشان میدهد، حتی اگر بیصدا باشند، و why دلیلی را که make تصمیم به ساخت مجدد هر هدف گرفته است نشان میدهد. از none برای غیرفعال کردن تمام پرچمهای اشکالزدایی پیشین استفاده کنید.
- -e, --environment-overrides
- به متغیرهای گرفتهشده از محیط نسبت به متغیرهای درون makefileها اولویت میدهد.
- -E string, --eval string
- پیش از تجزیهٔ هر makefile، string را با استفاده از تابع eval تفسیر میکند.
- -f file, --file=file, --makefile=FILE
- از file بهعنوان یک makefile استفاده میکند.
- -i, --ignore-errors
- تمامی خطاهای دستورات اجراشده برای بازسازی پروندهها را نادیده میگیرد.
- -I dir, --include-dir=dir
- دایرکتوری dir را برای جستجوی makefileهای ضمیمهشده مشخص میکند. اگر از چندین گزینهٔ -I برای تعیین چند دایرکتوری استفاده شود، دایرکتوریها به همان ترتیبِ مشخصشده جستجو میشوند. برخلاف آرگومانهای سایر پرچمهای make، دایرکتوریهای مشخصشده با پرچمهای -I میتوانند مستقیماً پس از پرچم بیایند: -Idir مجاز است، و همچنین -I dir. این نحو برای سازگاری با پرچم -I پیشپردازندهٔ C مجاز است.
- -j [jobs], --jobs[=jobs]
- تعداد jobs (دستورات) را برای اجرای همزمان مشخص میکند. اگر بیش از یک گزینهٔ -j وجود داشته باشد، آخرین مورد اعمال میشود. اگر گزینهٔ -j بدون آرگومان داده شود، make تعداد کارهایی که میتوانند بهطور همزمان اجرا شوند را محدود نخواهد کرد.
- --jobserver-style=style
- سبک jobserver مورد استفاده. style میتواند یکی از fifo, pipe, یا sem (تنها در ویندوز) باشد.
- -k, --keep-going
- پس از بروز خطا، تا جای ممکن به کار ادامه میدهد. در حالی که هدفی که با شکست مواجه شده و مواردی که به آن وابسته هستند نمیتوانند بازسازی شوند، سایر وابستگیهای این اهداف کماکان میتوانند پردازش شوند.
- -l [load], --load-average[=load]
- مشخص میکند در صورتی که کارهای دیگری در حال اجرا باشند و میانگین بار حداقل برابر با load (یک عدد ممیز شناور) باشد، کار (دستور) جدیدی آغاز نشود. بدون آرگومان، محدودیت بار قبلی را حذف میکند.
- -L, --check-symlink-times
- از جدیدترین mtime میان پیوندهای نمادین و هدف استفاده میکند.
- -n, --just-print, --dry-run, --recon
- دستوراتی را که باید اجرا شوند چاپ میکند، اما آنها را اجرا نمیکند (مگر در شرایط خاص).
- -o file, --old-file=file, --assume-old=file
- پروندهٔ file را بازسازی نمیکند، حتی اگر از وابستگیهای خود قدیمیتر باشد، و هیچچیز را بازسازی نمیکند به دلیل تغییرات در file. در اصل با این پرونده مانند پروندهای بسیار قدیمی رفتار میشود و قواعد آن نادیده گرفته میشوند.
- -O[type], --output-sync[=type]
- هنگام اجرای چندین کار به صورت موازی با -j، اطمینان حاصل میکند که خروجی هر کار به جای آمیخته شدن با خروجی کارهای دیگر، به طور یکجا جمعآوری شود. اگر type مشخص نشده باشد یا برابر با target باشد، خروجی کل دستورالعمل برای هر هدف با یکدیگر گروهبندی میشود. اگر type برابر با line باشد، خروجی هر خط دستور در یک دستورالعمل با یکدیگر گروهبندی میشود. اگر type برابر با recurse باشد، خروجی کل یک make بازگشتی با یکدیگر گروهبندی میشود. اگر type برابر با none باشد، همگامسازی خروجی غیرفعال میشود.
- -p, --print-data-base
- پایگاه داده (قوانین و مقادیر متغیرها) حاصل از خواندن makefileها را چاپ میکند؛ سپس طبق معمول یا همانطور که مشخص شده اجرا میشود. این کار همچنین اطلاعات نگارش ارائهشده توسط گزینهٔ -v (پایین را ببینید) را چاپ میکند. برای چاپ پایگاه داده بدون تلاش برای بازسازی پروندهها، استفاده کنید از make -p -f/dev/null.
- -q, --question
- «حالت پرسش». هیچ دستوری را اجرا نکرده و چیزی چاپ نمیکند؛ فقط یک کد خروج برمیگرداند که اگر هدفهای مشخصشده از پیش بهروز باشند صفر، و در غیر این صورت غیرصفر است.
- -r, --no-builtin-rules
- استفاده از قوانین ضمنی توکار را حذف میکند. همچنین فهرست پیشفرض پسوندها برای قوانین پسوند را پاک میکند.
- -R, --no-builtin-variables
- هیچ متغیر توکاری را تعریف نمیکند.
- -s, --silent, --quiet
- عملیات بیصدا؛ دستورات را هنگام اجرا چاپ نمیکند.
- --no-silent
- اثر گزینهٔ -s را لغو میکند.
- -S, --no-keep-going, --stop
- اثر گزینهٔ -k را لغو میکند.
- -t, --touch
- پروندهها را لمس میکند (بدون تغییر واقعی، آنها را بهعنوان بهروز علامتگذاری میکند) بهجای اجرای دستوراتشان. این کار برای وانمود کردن به انجام شدن دستورات به کار میرود، جهت فریب دادن فراخوانیهای بعدی make.
- --trace
- اطلاعات مربوط به وضعیت هر هدف چاپ میشود (اینکه چرا هدف در حال بازسازی است و چه دستوراتی برای بازسازی آن اجرا میشوند).
- -v, --version
- نگارش برنامهٔ make را بههمراه حق نشر، فهرستی از نویسندگان و اطلاعیهٔ عدم وجود ضمانت چاپ میکند.
- -w, --print-directory
- چاپ پیامی حاوی دایرکتوری کاری پیش و پس از سایر پردازشها. این قابلیت ممکن است برای ردگیری خطاهای ناشی از تودرتوییهای پیچیده دستورات بازگشتی make مفید باشد.
- --no-print-directory
- غیرفعال کردن -w، حتی اگر بهطور ضمنی فعال شده باشد.
- --shuffle[=MODE]
- فعالسازی درهمریزی ترتیب اهداف و پیشنیازها. MODE یکی از مقادیر زیر است: none برای غیرفعال کردن حالت درهمریزی، random برای درهمریختن پیشنیازها با ترتیب تصادفی، reverse برای در نظر گرفتن پیشنیازها به ترتیب معکوس، یا یک عدد صحیح <seed> که حالت random را با مقدار مشخصی از seed فعال میکند. اگر MODE مشخص نشود، مقدار پیشفرض random است.
- -W file, --what-if=file, --new-file=file, --assume-new=file
- وانمود میکند که پرونده هدف file بهتازگی تغییر یافته است. هنگامی که همراه با گزینه -n استفاده شود، نشان میدهد در صورت تغییر آن پرونده چه رخ خواهد داد. بدون -n، این حالت تقریباً مشابه اجرای دستور touch روی پرونده دادهشده پیش از اجرای make است، با این تفاوت که زمان تغییر تنها در تصور make تغییر میکند.
- --warn-undefined-variables
- هنگام ارجاع به یک متغیر تعریفنشده، هشدار میدهد.
کدهای خروج (EXIT CODES)
برنامه GNU Make در صورتی که تمام makefileها با موفقیت تجزیه شوند و ساخت هیچیک از هدفها با شکست مواجه نشود، با وضعیت صفر خارج میشود. اگر از گزینه -q استفاده شده باشد و make تشخیص دهد که یک هدف باید بازسازی شود، وضعیت یک بازگردانده خواهد شد. در صورت بروز هرگونه خطا، وضعیت دو بازگردانده خواهد شد.
همچنین ببینید (SEE ALSO)
مستندات کامل make بهعنوان یک راهنمای Texinfo نگهداری میشود. اگر برنامههای info و make بهدرستی روی سیستم شما نصب شده باشند، دستور
- info make
باید دسترسی شما را به راهنمای کامل فراهم کند.
باگها (BUGS)
مراجعه کنید به فصل ``Problems and Bugs'' در The GNU Make Manual.
نویسندگان (AUTHORS)
این صفحهٔ راهنما توسط Dennis Morse از دانشگاه استنفورد ارائه شده است. بهروزرسانیهای بعدی توسط Mike Frysinger انجام شده است. این مستند توسط Roland McGrath بازبینی شده و توسط Paul Smith نگهداری میشود.
حق نشر (COPYRIGHT)
حق نشر © 1992-1993, 1996-2023 Free Software Foundation, Inc. این پرونده بخشی است از GNU Make.
برنامه GNU Make یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) همانطور که توسط بنیاد نرمافزار آزاد منتشر شده است، چه نسخهٔ ۳ مجوز یا (به انتخاب خودتان) هر نسخهٔ بالاتری، بازتوزیع کرده و/یا تغییر دهید.
برنامه GNU Make به این امید که مفید باشد توزیع شده است، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابلیت فروش یا تناسب برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه کنید.
شما باید یک نسخه از مجوز عمومی همگانی گنو را همراه با این برنامه دریافت کرده باشید. در غیر این صورت، مراجعه کنید به https://www.gnu.org/licenses.
| 26 May 2023 | GNU |