. \" @(#)makefiles.4 1.7 09/04/11 Copyr 1996 J. Schilling . \" User Manual page for makefile system . \" .if t .ds a \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'a .if t .ds o \v'-0.55m'\h'0.00n'\z.\h'0.45n'\z.\v'0.55m'\h'-0.45n'o .if t .ds u \v'-0.55m'\h'0.00n'\z.\h'0.40n'\z.\v'0.55m'\h'-0.40n'u .if t .ds A \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'A .if t .ds O \v'-0.77m'\h'0.25n'\z.\h'0.45n'\z.\v'0.77m'\h'-0.70n'O .if t .ds U \v'-0.77m'\h'0.30n'\z.\h'0.45n'\z.\v'0.77m'\h'-.75n'U .if t .ds s \(*b .if t .ds S SS .if n .ds a ae .if n .ds o oe .if n .ds u ue .if n .ds s sz .TH makefiles 5 "14. February 1997" "J\*org Schilling" "GMD FOKUS FILE FORMATS" .SH "نام (NAME)" makefiles \- قالب سیستم ساخت و فایل‌های makefile در سیستم .SH "خلاصه دستور (SYNOPSIS)" .B "make [target] .br .B "gmake [target] .br .B "smake [target] .br .PP هدف (\fItarget\fR) می‌تواند یکی از موارد زیر باشد: .TP 10 \&.help برای دریافت فهرستی از اهداف ممکن و توضیح کوتاهی درباره آن‌ها. .TP all برای ساخت اهداف پیش‌فرض. .TP install برای ساخت و نصب اهداف پیش‌فرض (به .IR INS_BASE " و " INS_KBASE مراجعه کنید تا با نحوه تغییر مسیر نصب آشنا شوید). .TP ibins برای ساخت و نصب هدف در .I SRCROOT/bins .TP depend برای بازسازی قواعد وابستگی برای تمام اهداف پیش‌فرض. نکته: تمامی فایل‌های وابستگی در اجرای بعدی make پیش از گنجانده شدن، به‌طور خودکار بازسازی خواهند شد. .TP clean برای حذف فایل‌های .I core و تمام فایل‌های میانی شیء (object). .TP clobber برای حذف اهداف حاصل از .IR clean ، تمامی فایل‌های وابستگی و تمام اهداف نهایی. .TP distclean برای حذف اهداف حاصل از .IR clean " و " clobber و تمام فایل‌های ساخته‌شده برای همه معماری‌ها. .TP tags برای ساخت تگ‌های سازگار با .IR vi (1) .TP TAGS برای ساخت تگ‌های سازگار با .IR emacs (1) .TP config برای استفاده‌های آینده رزرو شده است. .TP rmtarget برای حذف هدف پیش‌فرض. .TP relink برای حذف هدف پیش‌فرض و بازسازی فوری آن. این گزینه می‌تواند مثلاً برای تغییر LD_RUN_PATH در فایل اجرایی استفاده شود. .SH "توضیحات (DESCRIPTION)" سیستم Makefiles مجموعه‌ای از قواعد است که امکان کامپایل پروژه‌های ساخت‌یافته را با makefileهای کوچک و دارای ساختار یکدست فراهم می‌سازد. تمامی قواعد در یک دایرکتوری مرکزی قرار دارند. کامپایل پروژه‌ها روی پلتفرم‌های مختلف می‌تواند به‌طور هم‌زمان و بدون نیاز به دستکاری هیچ‌یک از makefileهای موجود در دایرکتوری‌های پروژه انجام شود. .PP سیستم Makefiles مجموعه‌ای از ابزارهای سطح بالای سازگاری و انتقال‌پذیری (portability) است که از .B autoconf برتر بوده و استفاده از آن آسان‌تر است. .PP سه برنامه make پشتیبانی می‌شوند: .IR "Sunpro make" ، .I "GNU make" و .IR smake . .PP برنامه .I BSDmake در صورتی که از قواعد تطبیق الگو (pattern matching rules) به‌درستی پشتیبانی کند، می‌تواند پشتیبانی شود. .PP هدف اصلی طراحی این سیستم، داشتن مجموعه‌ای از makefileهای کوچک و خوانا بوده است که هرکدام در دایرکتوری انتهایی برگ (leaf) پروژه قرار گرفته و از این رو .IR leaf -makefile (میک‌فایل برگ) نامیده می‌شوند. .PP هر یک از این .IR leaf -makefileها در واقع هیچ قاعده‌ای درون خود ندارند. آن‌ها به‌سادگی چند ماکرو برای برنامه .IR make تعریف کرده و دو فایل را از مخزن مرکزی قواعد make فراخوانی (include) می‌کنند. فایل‌های فراخوانی‌شده و فایل‌هایی که به‌صورت بازگشتی فراخوانی می‌شوند، قواعد لازم برای کامپایل پروژه را تعریف می‌کنند. .PP هر .IR leaf -makefile به روشی بسیار ساده تشکیل شده است: .TP \(bu نخست دو ماکرو تعریف می‌کند که موقعیت نسبی دایرکتوری ریشه پروژه و نام دایرکتوری حاوی مجموعه کامل قواعد را مشخص می‌سازند، و سپس فایل قواعد .I rules.top را از دایرکتوری مخزن مرکزی قواعد فراخوانی می‌کند. تنها کافی است ماکروی .I SRCROOT را ویرایش کنید تا بیانگر موقعیت نسبی دایرکتوری ریشه پروژه باشد. .TP \(bu بخش بعدی یک .IR leaf -makefile ماکروهایی را تعریف می‌کند که هدف (target) و مبدا (source) را توصیف می‌کنند. در هر .IR leaf -makefile فقط می‌توانید یک هدف داشته باشید. البته ممکن است فایل‌های مبدا متعددی برای ایجاد آن هدف نیاز باشند. اگر می‌خواهید بیش از یک هدف در یک دایرکتوری مشخص بسازید، باید بیش از یک makefile در آن دایرکتوری قرار دهید. این بخشی از makefile است که یک هدف یکتا را توصیف می‌کند. این بخش را طوری ویرایش کنید که شامل تمام فایل‌های مبدا، تمام فایل‌های include محلی و تمام پرچم‌های غیرعمومی زمان کامپایل باشد که برای هدف شما مورد نیازند. برای یک هدف معمول، این کار به سادگی پر کردن یک فرم است. .TP \(bu در نهایت هر .IR leaf -makefile فایلی را از دایرکتوری قواعد فراخوانی می‌کند که حاوی قواعد مناسب برای نوع هدفی است که باید از این .IR leaf -makefile ساخته شود. .PP فایل makefile در هر دایرکتوری باید .IR Makefile نامیده شود. اگر می‌خواهید بیش از یک makefile در یک دایرکتوری مشخص داشته باشید، باید نام‌های متفاوتی برای سایر makefileها انتخاب کنید. .PP قواعدی برای انواع اهداف زیر وجود دارد: .TP 20 commands قواعد make برای دستورات سطح کاربر مانند .IR cat ، .IR ls و غیره در فایل .I rules.cmd قرار دارند. .TP drivers قواعد make برای درایورهای دستگاه در فایل .I rules.drv قرار دارند. .TP libraries قواعد make برای کتابخانه‌های غیرمشترک (ایستا) در فایل .I rules.lib قرار دارند. .TP shared libraries قواعد make برای کتابخانه‌های مشترک (پویا) در فایل .I rules.shl قرار دارند. .TP localized files قواعد make برای فایل‌های محلی‌سازی‌شده در فایل .I rules.loc قرار دارند. .TP nonlocalized files قواعد make برای فایل‌های غیرمحلی‌سازی‌شده در فایل .I rules.aux قرار دارند. .TP shell scripts قواعد make برای اسکریپت‌های شل (نوعی از فایل‌های محلی‌سازی‌شده) در فایل .I rules.scr قرار دارند. .TP manual pages قواعد make برای صفحات راهنما (نوعی از فایل‌های محلی‌سازی‌شده) در فایل .I rules.man قرار دارند. .TP diverted makefiles قواعد make برای پروژه‌هایی که نیاز به بیش از یک makefile در یک دایرکتوری خاص دارند، در فایل .I rules.mks قرار دارند. این فایل حاوی قاعده‌ای است که پردازش را به زیر-میک‌فایل‌های فهرست‌شده هدایت می‌کند. هر زیر-میک‌فایل می‌تواند از هر نوعی باشد. .TP directories قواعد make برای زیردایرکتوری‌ها در فایل .I rules.dir قرار دارند. .SH "ماکروها/متغیرهای استفاده‌شده در قواعد (MACROS/VARIABLES USED IN RULES)" .PP در ادامه توضیحی درباره مهم‌ترین ماکروهای استفاده‌شده در قواعد make آمده است. .IR "نکته:" شاید نیاز نباشد همه آن‌ها در یک makefile خاص تغییر کنند. توضیحات را به‌دقت بخوانید و تنها ماکروهایی را تغییر دهید که برای تغییر رفتار کامپایل در نظر گرفته شده‌اند. .TP 13 ARCHDIR شامل مسیری است که فایل‌های شیء و اهداف make در آن قرار می‌گیرند. یک نام معمول به این صورت است: .I "OBJ/sparc\-sunos5\-cc .br این ماکرو را تغییر ندهید. . .TP ASFLAGS پرچم‌هایی که برای اسمبلر استفاده می‌شوند. .br این ماکرو را تغییر ندهید. . .TP ASMFILES فهرستی از فایل‌های مبدا اسمبلی که باید در یک leaf makefile مشخص شوند. . .TP ASOPTS ماکروی داخلی شامل پرچم‌های اسمبلر. اگر مایلید رفتار را تغییر دهید، این ماکرو را ویرایش کنید. برای بازنویسی مقدار پیش‌فرض استفاده کنید از: .B "ASOPTS= value" اگر می‌خواهید پرچم‌های پیش‌فرض اسمبلر را از خط فرمان بازنویسی کنید، اجرا کنید: .B "make 'ASOPTS=value'" اگر می‌خواهید از درون یک makefile پرچم‌هایی به مقدار پیش‌فرض اضافه کنید، استفاده کنید از: .B "ASOPTS += value" . .TP ASOPTX می‌تواند برای افزودن پرچم‌ها به پرچم‌های اسمبلر از طریق خط فرمان استفاده شود. استفاده کنید از: .B "make 'ASOPTX=value' . .TP C_ARCH این ماکرو شامل نام معماری کامپایلر c است. .br این ماکرو را تغییر ندهید. . .TP CCOM این ماکرو می‌تواند از خط فرمان برای استفاده از یک کامپایلر c متفاوت از کامپایلر پیش‌فرض استفاده شود. استفاده کنید از: .B "make 'CCOM=gcc' تا برای اجرای بعدی از .I gcc استفاده شود. نکته: مقدار .I CCOM لزوماً نباید دقیقاً برابر با نام واقعی کامپایلر c باشد. بلکه به نام فایلی اشاره دارد که حاوی تعریف آن کامپایلر c است. این نکته برای تمام ماکروهای دیگری که با نام کامپایلر c سروکار دارند نیز صدق می‌کند. تنها ماکرویی که شامل نام فراخوانی واقعی کامپایلر c است، .IR CC می‌باشد. ماکروی .I CC درون فایل پیکربندی وابسته به ماشین در مخزن مرکزی قواعد تنظیم می‌شود و نباید در جای دیگری تغییر یابد. . .TP CFILES فهرستی از فایل‌های مبدا C که باید در یک leaf makefile مشخص شوند. . .TP CFLAGS پرچم‌هایی که برای کامپایلر c استفاده می‌شوند. از پرچم‌های متعلق به پیش‌پردازنده c در ماکروهای .IR COPTOPT ، .IR COPTS و .IR COPTX استفاده نکنید. .br این ماکرو را تغییر ندهید. . .TP CLEAN_FILES فهرستی از فایل‌ها (به‌جز فایل‌های شیء) که با دستور .IR "make clean" حذف خواهند شد. .br این ماکرو را تغییر ندهید. . .TP CLEAN_FILEX این ماکرو می‌تواند برای تعریف فایل‌های اضافه‌ای که باید با دستور .IR "make clean" حذف شوند استفاده شود. . .TP CLOBBER_FILEX این ماکرو می‌تواند برای تعریف فایل‌های اضافه‌ای که باید با دستور .IR "make clobber" حذف شوند استفاده شود. . .TP COPTOPT پرچم بهینه‌سازی کامپایلر c. این پرچم برای این در نظر گرفته شده است که از طریق makefile یا خط فرمان بازنویسی شود. . .TP COPTS ماکروی داخلی شامل پرچم‌های کامپایلر c. اگر مایلید رفتار را تغییر دهید، این ماکرو را ویرایش کنید. برای بازنویسی مقدار پیش‌فرض استفاده کنید از: .B "COPTS= value" اگر می‌خواهید پرچم‌های پیش‌فرض کامپایلر c را از خط فرمان بازنویسی کنید، اجرا کنید: .B "make 'COPTS=value'" اگر می‌خواهید از درون یک makefile پرچم‌هایی به مقدار پیش‌فرض اضافه کنید، استفاده کنید از: .B "COPTS += value" . .TP COPTX می‌تواند برای افزودن پرچم‌ها به پرچم‌های کامپایلر c از طریق خط فرمان استفاده شود. استفاده کنید از: .B "make 'COPTX=value' . .TP CPPFLAGS پرچم‌هایی که برای پیش‌پردازنده c استفاده می‌شوند. این ماکرو و همچنین: .IR CPPOPTS " و " CPPOPTX هنگام کامپایل برنامه‌های c نیز استفاده می‌شوند. آن‌ها تنها باید شامل پرچم‌های زیر باشند: .IR "\-Dname=value " ، .IR "\-Uname " ، .IR \-Idirectory " و " \-Ydirectory . .br این ماکرو را تغییر ندهید. . .TP CPPOPTS ماکروی داخلی شامل پرچم‌های پیش‌پردازنده c. اگر مایلید رفتار را تغییر دهید، این ماکرو را ویرایش کنید. برای بازنویسی مقدار پیش‌فرض استفاده کنید از: .B "CPPOPTS= value" اگر می‌خواهید پرچم‌های پیش‌فرض پیش‌پردازنده c را از خط فرمان بازنویسی کنید، اجرا کنید: .B "make 'CPPOPTS=value'" اگر می‌خواهید از درون یک makefile پرچم‌هایی به مقدار پیش‌فرض اضافه کنید، استفاده کنید از: .B "CPPOPTS += value" . .TP CPPOPTX می‌تواند برای افزودن پرچم‌ها به پرچم‌های پیش‌پردازنده c از طریق خط فرمان استفاده شود. استفاده کنید از: .B "make 'CPPOPTX=value' . .TP CURDIR این ماکرو شامل نام زیردایرکتوری است که در حال حاضر در حال پردازش است. .br این ماکرو را تغییر ندهید. . .TP CWARNOPTS این ماکرو می‌تواند در .I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults یا .I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) تنظیم شود تا گزینه‌های هشدار پیش‌فرض کامپایلر c را بازنویسی کند. . .TP CWOPTS این ماکرو درون فایل پیکربندی وابسته به ماشین در مخزن مرکزی قواعد تنظیم می‌شود و نباید در جای دیگری تغییر یابد. این ماکرو شامل پرچم‌هایی است که سطح پیش‌فرض هشدار را برای کامپایلر c مشخص می‌کنند. . .TP DEFINSGRP این ماکرو می‌تواند در فایل پیش‌فرض‌های پروژه تنظیم شود تا شناسه گروه (group id) پیش‌فرض را برای عملیات نصب تعیین کند. .TP DEFINSMODE این ماکرو می‌تواند در فایل پیش‌فرض‌های پروژه تنظیم شود تا مجوزهای فایل (file permission) پیش‌فرض را برای عملیات نصب تعیین کند. .TP DEFINSUSR این ماکرو می‌تواند در فایل پیش‌فرض‌های پروژه تنظیم شود تا شناسه کاربر (user id) پیش‌فرض را برای عملیات نصب تعیین کند. .TP DEFUMASK این ماکرو می‌تواند در فایل پیش‌فرض‌های پروژه تنظیم شود تا مقدار پیش‌فرض .I umask را برای ایجاد زیردایرکتوری‌ها تعیین کند. . .TP DEFAULTSDIR این ماکرو در صورتی که کاربر بخواهد از مجموعه متفاوتی از فایل‌های .I Defaults استفاده کند که در دایرکتوری .B DEFAULTS در دایرکتوری ریشه منبع قرار ندارند، می‌تواند از خط فرمان یا محیط شل تنظیم شود. این ماکرو می‌تواند برای نگهداری دو یا چند مجموعه پیش‌فرض به کار رود که مثلاً در مسیر نصب یا کامپایلر C با یکدیگر تفاوت دارند. . .TP DEFAULTSROOT این ماکرو در صورتی که یک leaf makefile بخواهد از یک فایل .I Defaults استفاده کند که در .I $(DEFAULTSDIR) در ریشه منبع قرار ندارد، می‌تواند در آن makefile تنظیم شود. این ماکرو زمانی کاربرد دارد که یک زیردرخت در پروژه‌ای بزرگ به پیکربندی متفاوتی نیاز داشته باشد. . .TP DEFLTSDIR ماکرویی داخلی است که از .I $(DEFAULTSDIR) یا از مقادیر پیش‌فرض داخلی تنظیم می‌شود. .br این ماکرو را تغییر ندهید. . .TP DEFLTSROOT ماکرویی داخلی است که از .I $(DEFAULTSROOT) یا از مقادیر پیش‌فرض داخلی تنظیم می‌شود. .br این ماکرو را تغییر ندهید. . .TP DEFCCOM نام پیش‌فرض کامپایلر c. این مقدار معمولاً در فایل .I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults یا .IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) تنظیم می‌شود. . .TP DEFINCDIRS فهرستی از دایرکتوری‌ها که به‌طور پیش‌فرض علاوه بر دایرکتوری‌های include سیستم جستجو می‌شوند. اگر این ماکرو تنظیم نشده باشد، از .I $(SRCROOT)/include استفاده می‌شود. . .TP DIRNAME این ماکرو باید در makefile موجود در دایرکتوری .I $(SRCROOT) تنظیم شود. مقدار آن باید نام دایرکتوری محل قرارگیری makefile یا .B SRCROOT باشد. مقدار این ماکرو به‌طور خودکار به‌روزرسانی می‌شود تا سلسله‌مراتب دایرکتوری را دنبال کند. این ماکرو را در فایلی غیر از makefile موجود در ریشه منبع تغییر ندهید. . .TP DIRS این ماکرو باید در makefile مستقر در دایرکتوری‌ای تنظیم شود که حاوی دایرکتوری‌های هدایت (diversion) است. این ماکرو باید شامل فهرستی از نام‌های دایرکتوری‌هایی باشد که هدایت به آن‌ها انجام می‌شود، مانند: .BR "DIRS= libfoo libbar libgarbage" . . .TP HFILES در حالت کارکرد عادی، .I makefiles به‌طور خودکار فایل‌های include مورد نیاز برای کامپایل را پیدا می‌کند. با این حال، اگر می‌خواهید یک فایل تگ (tag file) ایجاد کنید که شامل تگ‌هایی برای تعاریف موجود در فایل‌های include باشد، باید .I HFILES را برابر با فهرستی از فایل‌های include حاوی چنین تعاریفی قرار دهید. . .TP INCDIRS این ماکرو معمولاً رونوشتی از .IR DEFINCDIRS خواهد بود. با این حال می‌توانید مقدار متفاوتی در یک leaf makefile یا از طریق خط فرمان برای آن مشخص کنید. این کار مقدار پیش‌فرض را بازنویسی می‌کند. . .TP INS_BASE این ماکرو باید در فایل .I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults یا .IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) مشخص شود. این ماکرو باید شامل نام مسیر ریشه برای نصب اهداف عمومی پروژه باشد. به .IR INSDIR مراجعه کنید. . .TP INS_KBASE این ماکرو باید در فایل .I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults یا .IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) مشخص شود. این ماکرو باید شامل نام مسیر ریشه برای نصب ماژول‌های هسته از پروژه باشد. به .IR INSDIR مراجعه کنید. . .TP INSDIR این ماکرو باید در leaf makefile مشخص شود. این ماکرو باید شامل نام مسیر یک دایرکتوری نسبی نسبت به .IR INS_BASE " یا " INS_KBASE باشد. هدف درون .I "$(INS_BASE)/$(INSDIR)" نصب خواهد شد. . .TP INSGRP این ماکرو می‌تواند در یک leaf makefile تنظیم شود تا شناسه گروه را برای عملیات نصب تعیین کند. .TP INSMODE این ماکرو می‌تواند در یک leaf makefile تنظیم شود تا مجوزهای فایل را برای عملیات نصب تعیین کند. .TP INSUSR این ماکرو می‌تواند در یک leaf makefile تنظیم شود تا شناسه کاربر را برای عملیات نصب تعیین کند. . .TP K_ARCH این ماکرو شامل معماری هسته/ماشین برای ماشین مقصد است (مانند .IR "sun3 sun4c sun4m sun4u 9000\-725 aviion" ). مقدار آن برابر با خروجی دستور .I "uname \-m است که به حروف کوچک تبدیل شده است. .br این ماکرو را تغییر ندهید. . .TP KARCH این ماکرو شامل معماری هسته/ماشین برای ماشین مقصد است (مانند .IR "sun3 sun4c sun4m sun4u 9000\-725 aviion" ). مقدار آن برابر با خروجی دستور .I "uname \-m است که به حروف کوچک تبدیل شده است. .br این ماکرو را تغییر ندهید مگر اینکه قصد کامپایل متقاطع (cross compilation) داشته باشید. . .TP LDFLAGS پرچم‌هایی که برای پیونددهنده (linker) استفاده می‌شوند. .br این ماکرو را تغییر ندهید. . .TP LDLIBS ماکروی داخلی که کتابخانه‌های مورد استفاده هنگام پیوند هدف را در خود نگه می‌دارد. .br این ماکرو را تغییر ندهید. . .TP LDOPTS ماکروی داخلی شامل پرچم‌های پیونددهنده. اگر مایلید رفتار را تغییر دهید، این ماکرو را ویرایش کنید. برای بازنویسی مقدار پیش‌فرض استفاده کنید از: .B "LDOPTS= value" اگر می‌خواهید پرچم‌های پیش‌فرض پیونددهنده را از خط فرمان بازنویسی کنید، اجرا کنید: .B "make 'LDOPTS=value'" اگر می‌خواهید از درون یک makefile پرچم‌هایی به مقدار پیش‌فرض اضافه کنید، استفاده کنید از: .B "LDOPTS += value" . .TP LDOPTX می‌تواند برای افزودن پرچم‌ها به پرچم‌های پیونددهنده از طریق خط فرمان استفاده شود. استفاده کنید از: .B "make 'LDOPTX=value' . .TP LDPATH مسیر پیش‌فرض جستجوی کتابخانه‌ها برای پیونددهنده. این مقدار معمولاً در فایل .I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults یا .IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) تنظیم می‌شود. . .TP LIB_KVM یک ماکروی از پیش تعریف‌شده شامل نام وابسته به سیستم‌عامل برای کتابخانه‌ای که برنامه‌های خواننده/نویسنده حافظه مجازی هسته (kernel virtual memory) به آن نیاز دارند. اگر هدف شما از kvm استفاده می‌کند، .I "$(LIB_KVM) را به فهرست کتابخانه‌های خود اضافه کنید (مانند .BR "LIBS= \-lintl $(LIB_KVM)" ). . .TP LIB_MATH یک ماکروی از پیش تعریف‌شده شامل نام وابسته به سیستم‌عامل برای کتابخانه‌ای که برنامه‌های استفاده‌کننده از توابع کتابخانه ریاضی به آن نیاز دارند. اگر هدف شما از زیربرنامه‌های ریاضی استفاده می‌کند، .I "$(LIB_MATH) را به فهرست کتابخانه‌های خود اضافه کنید (مانند .BR "LIBS= \-lintl $(LIB_MATH)" ). . .TP LIB_SOCKET یک ماکروی از پیش تعریف‌شده شامل نام وابسته به سیستم‌عامل برای کتابخانه‌ای که برنامه‌های استفاده‌کننده از فراخوانی‌های سوکت به آن نیاز دارند. اگر هدف شما از سوکت‌ها استفاده می‌کند، .I "$(LIB_SOCKET) را به فهرست کتابخانه‌های خود اضافه کنید (مانند .BR "LIBS= \-lintl $(LIB_SOCKET)" ). نکته: برای حفظ سازگاری و انتقال‌پذیری، این کار حتی باید روی سیستم‌هایی انجام شود که به کتابخانه سوکت جداگانه نیاز ندارند چون رابط سوکت را درون libc دارند. . .TP LIBS_PATH این ماکرو شامل مسیر دایرکتوری کتابخانه‌هایی است که طی اجرای یک make درون پروژه فعلی ساخته شده‌اند. .br این ماکرو را تغییر ندهید. . .TP M_ARCH این ماکرو شامل معماری ماشین برای ماشین مقصد است (مانند .IR "sun3 sun4 ip22 i86pc i586 9000\-725 aviion" ). مقدار آن برابر با خروجی دستور .I "arch است که به حروف کوچک تبدیل شده است. روی سیستم‌هایی که در آن‌ها .I M_ARCH در دسترس نیست، مقدار آن برابر با محتوای .IR K_ARCH قرار می‌گیرد. .br این ماکرو را تغییر ندهید. . .TP MK_FILES فایل‌های makefile که پردازش را به زیر-makeها در همان دایرکتوری هدایت می‌کنند، باید .I MK_FILES را برابر با فهرستی از نام‌های makefile برای زیر-makeها تنظیم کنند. نام‌های makefile برای زیر-makeها باید با افزودن .I .mk به نام پایه هدفی که درون آن makefile تعریف شده است، ساخته شوند. . .TP MAKEPROG اگر برنامه make شما از ماکروی .IR MAKE_NAME پشتیبانی نمی‌کند، این ماکرو را به نام برنامه make خود تنظیم کنید. برنامه make با نام .I smake می‌تواند خود را شناسایی کند. اگر می‌خواهید از برنامه make استفاده کنید که قادر به شناسایی خود نیست و نام آن .IR make نیست، .I MAKEPROG را برابر با نام آن برنامه make قرار دهید. در حال حاضر تنها .I gmake به‌عنوان مقدار جایگزین برای .IR MAKEPROG پشتیبانی می‌شود. اگر می‌خواهید از یک برنامه make پشتیبانی‌نشده استفاده کنید، باید بررسی کنید که آیا از ویژگی‌های لازم برای .IR makefiles پشتیبانی می‌کند یا خیر. شما باید فایل‌های قواعد مخصوص به خود را برای آن برنامه make بنویسید. اگر می‌خواهید از .IR gmake استفاده کنید، باید پیش از شروع .I gmake دستور .B "setenv MAKEPROG gmake را اجرا کنید یا از یک اسکریپت شل استفاده کنید که این کار را برای شما انجام دهد. . .TP MAKE این ماکرو توسط برنامه .I make تنظیم می‌شود. این ماکرو شامل نام مسیری است که برای فراخوانی بازگشتی همان برنامه .I make کفایت می‌کند (یا آخرین جز مسیر یا نام مسیر کامل برنامه make). .br این ماکرو را تغییر ندهید. . .TP MAKEFLAGS این ماکرو توسط برنامه .I make تنظیم می‌شود. این ماکرو شامل پرچم‌های خط فرمانی است که .I make با آن‌ها فراخوانی شده است. .br این ماکرو را تغییر ندهید. . .TP MAKE_ARCH این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل معماری پردازنده ماشین مقصد است (مانند mc68020، sparc، pentium). .br این ماکرو را تغییر ندهید. . .TP MAKE_BRAND این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل برند ماشین مقصد است (مانند Sun_Microsystems). .br این ماکرو را تغییر ندهید. . .TP MAKE_HOST این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل نام میزبان (hostname) ماشین مقصد است (مانند duffy، sherwood، ghost). .br این ماکرو را تغییر ندهید. . .TP MAKE_MACH این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل معماری هسته ماشین مقصد است (مانند sun3، sun4c، sun4m، sun4u). .br این ماکرو را تغییر ندهید. . .TP MAKE_MODEL این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل نام مدل ماشین مقصد است (مانند SUNW,SPARCstation-20). .br این ماکرو را تغییر ندهید. . .TP MAKE_M_ARCH این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل معماری ماشین برای ماشین مقصد است (مانند sun3، sun4). .br این ماکرو را تغییر ندهید. . .TP MAKE_NAME این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل نام رسمی برنامه make است (مانند make، smake، gmake). .br این ماکرو را تغییر ندهید. . .TP MAKE_OS این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل نام سیستم‌عامل ماشین مقصد است (مانند sunos، linux، dgux). .br این ماکرو را تغییر ندهید. . .TP MAKE_OSDEFS این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل تعاریف مختص سیستم‌عامل برای کامپایلر است (مانند \-D__SVR4). .br این ماکرو را تغییر ندهید. . .TP MAKE_OSREL این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل نام نگارش سیستم‌عامل ماشین مقصد است (مانند 5.5، 4.1.1). .br این ماکرو را تغییر ندهید. . .TP MAKE_OSVERSION این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل نسخه سیستم‌عامل ماشین مقصد است (مانند generic). .br این ماکرو را تغییر ندهید. . .TP MAKE_SERIAL این ماکرو در حال حاضر تنها توسط .B smake تنظیم می‌شود. شامل شماره سریال ماشین مقصد است (مانند 1920098175). .br این ماکرو را تغییر ندهید. . .TP MANDIR تمام makefileهای صفحات راهنما باید این ماکرو را برابر با نام مسیر نسبی نسبت به .I INS_BASE تنظیم کنند که دایرکتوری ریشه صفحات راهنمای پروژه باید در آنجا باشد. مقادیر ممکن برای صفحات راهنمای انگلیسی .IR man " یا " share/man و مقادیر ممکن برای صفحات راهنمای آلمانی .IR man/de " یا " share/man/de هستند. . .TP MANFILE فایل‌های makefile برای صفحات راهنما، این ماکرو را به نام فایل مبدا troff برای صفحه راهنما تنظیم می‌کنند. . .TP MANSECT فایل‌های makefile برای صفحات راهنما، این ماکرو را برابر با نام ماکرویی قرار می‌دهند که حاوی نام بخش واقعی برای این صفحه راهنما است. این کار به این دلیل ضروری است که سیستم‌های مبتنی بر bsd قراردادهای نام‌گذاری متفاوتی نسبت به سیستم‌های مبتنی بر system V دارند. برای فهرستی معتبر از ماکروهای بخش‌های راهنما به ادامه مطلب مراجعه کنید. .TP MANSECT_ADMIN این ماکرو شامل نام زیردایرکتوری برای دستورات مدیریتی و رویه‌های نگهداری سیستم است. .br این ماکرو را تغییر ندهید. .TP MANSECT_CMD این ماکرو شامل نام زیردایرکتوری برای دستورات عمومی کاربر است. .br این ماکرو را تغییر ندهید. .TP MANSECT_DEMOS این ماکرو شامل نام زیردایرکتوری برای دستورات نمایشی (دمو) است. .br این ماکرو را تغییر ندهید. .TP MANSECT_DEVICE این ماکرو شامل نام زیردایرکتوری برای رابط‌های دستگاه در سطح کاربر است. .br این ماکرو را تغییر ندهید. .TP MANSECT_DRIVER این ماکرو شامل نام زیردایرکتوری برای رابط‌های درایور دستگاه در سطح هسته است. .br این ماکرو را تغییر ندهید. .TP MANSECT_FILEFORM این ماکرو شامل نام زیردایرکتوری برای قالب‌های فایل است. .br این ماکرو را تغییر ندهید. .TP MANSECT_GAMES این ماکرو شامل نام زیردایرکتوری برای بازی‌ها است. .br این ماکرو را تغییر ندهید. .TP MANSECT_HDR این ماکرو شامل نام زیردایرکتوری برای فایل‌های هدر (سرآیند) است. .br این ماکرو را تغییر ندهید. .TP MANSECT_LIB این ماکرو شامل نام زیردایرکتوری برای رابط‌های توابع کتابخانه‌ای است. .br این ماکرو را تغییر ندهید. .TP MANSECT_MACROS این ماکرو شامل نام زیردایرکتوری برای ماکروهای troff است. .br این ماکرو را تغییر ندهید. .TP MANSECT_NETWORK این ماکرو شامل نام زیردایرکتوری برای رابط‌های شبکه در سطح کاربر است. .br این ماکرو را تغییر ندهید. .TP MANSECT_SYSCALL این ماکرو شامل نام زیردایرکتوری برای رابط‌های فراخوانی‌های سیستمی است. این ماکرو را تغییر ندهید. .TP MANSECT_TABLES این ماکرو شامل نام زیردایرکتوری برای جدول‌ها است. این ماکرو را تغییر ندهید. .TP MANSTYLE این ماکرو شامل نامی است که برای یافتن قراردادهای ترتیب‌بندی مناسب صفحات راهنما استفاده می‌شود. این ماکرو را تغییر ندهید. .TP MANSUFFIX فایل‌های makefile برای صفحات راهنما، این ماکرو را برابر با نام ماکرویی قرار می‌دهند که حاوی پسوند واقعی برای این صفحه راهنما است. این امر ضروری است زیرا سیستم‌های مبتنی بر bsd قراردادهای نام‌گذاری متفاوتی نسبت به سیستم‌های مبتنی بر system V دارند. برای فهرستی معتبر از ماکروهای پسوند راهنما به ادامه مطلب مراجعه کنید. .TP MANSUFF_ADMIN این ماکرو شامل نام پسوند فایل برای دستورات مدیریتی و رویه‌های نگهداری سیستم است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_CMD این ماکرو شامل نام پسوند فایل برای دستورات عمومی کاربر است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_DEMOS این ماکرو شامل نام پسوند فایل برای دستورات نمایشی است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_DEVICE این ماکرو شامل نام پسوند فایل برای رابط‌های دستگاه در سطح کاربر است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_DRIVER این ماکرو شامل نام پسوند فایل برای رابط‌های درایور دستگاه در سطح هسته است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_FILEFORM این ماکرو شامل نام پسوند فایل برای قالب‌های فایل است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_GAMES این ماکرو شامل نام پسوند فایل برای بازی‌ها است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_HDR این ماکرو شامل نام پسوند فایل برای فایل‌های هدر است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_LIB این ماکرو شامل نام پسوند فایل برای رابط‌های توابع کتابخانه‌ای است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_MACROS این ماکرو شامل نام پسوند فایل برای ماکروهای troff است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_NETWORK این ماکرو شامل نام پسوند فایل برای رابط‌های شبکه در سطح کاربر است. .br این ماکرو را تغییر ندهید. .TP MANSUFF_SYSCALL این ماکرو شامل نام پسوند فایل برای رابط‌های فراخوانی‌های سیستمی است. این ماکرو را تغییر ندهید. .TP MANSUFF_TABLES این ماکرو شامل نام پسوند فایل برای جدول‌ها است. این ماکرو را تغییر ندهید. .TP MARCH این ماکرو شامل معماری ماشین برای ماشین مقصد است (مانند .IR "sun3 sun4 ip22 i86pc i586 9000\-725 aviion" ). مقدار آن برابر با خروجی دستور .I "arch است که به حروف کوچک تبدیل شده است. روی سیستم‌هایی که در آن‌ها .I M_ARCH در دسترس نیست، مقدار آن برابر با محتوای .IR K_ARCH قرار می‌گیرد. .br این ماکرو را تغییر ندهید مگر اینکه بخواهید کامپایل متقاطع انجام دهید. . .TP O_ARCH این ماکرو شامل نام سیستم‌عامل است که به حروف کوچک تبدیل شده است. این مقدار معمولاً خروجی دستور زیر است: .IR "uname \-s" . اگر قواعد کامپایل برای نسخه‌های مختلف سیستم‌عامل متفاوت باشد، ممکن است حاوی نام اصلاح‌شده‌ای باشد (مثلاً در .IR SunOS " و " Solaris ، نام رسمی سیستم‌عامل در هر دو مورد .IR SunOS است). .br این ماکرو را تغییر ندهید. . .TP OARCH این ماکرو شامل معماری شیء (object architecture) است که برای زیردایرکتوری‌های وابسته به معماری استفاده می‌شود. مقدار آن به این صورت تنظیم می‌شود: .IR "$(PARCH)\-$(O_ARCH)\-$(C_ARCH)" . .br این ماکرو را تغییر ندهید. . .TP OARCHDIR این ماکرو شامل الحاق .I OBJ/ و .IR "$(OARCH)" است. .br این ماکرو را تغییر ندهید. . .TP OFILES این ماکرو شامل فهرست شیءهایی است که فهرست وابستگی هدف را تشکیل می‌دهند. این ماکرو از فهرست فایل‌های مبدا اسمبلی، فایل‌های مبدا c، فایل‌های مبدا lex و فایل‌های مبدا yacc ساخته می‌شود. .br این ماکرو را تغییر ندهید. . .TP OINCSDIR این ماکرو شامل الحاق .I $(SRCROOT)/incs/ و .IR "$(OARCH)" است. اینجا محلی است که فایل‌های include ساخته‌شده در طول اجرای make که برای استفاده سراسری هستند در آن قرار می‌گیرند. .br این ماکرو را تغییر ندهید. .TP OLIBSDIR این ماکرو شامل الحاق .I $(SRCROOT)/libs/ و .IR "$(OARCH)" است. اینجا محلی است که کتابخانه‌های ساخته‌شده در طول اجرای make در آن قرار می‌گیرند. .br این ماکرو را تغییر ندهید. . .TP OSDEFS این ماکرو شامل تعاریف پیش‌پردازنده c مختص سیستم‌عامل است. .br این ماکرو را تغییر ندهید. . .TP OSNAME نام اصلاح‌نشده سیستم‌عامل که به حروف کوچک تبدیل شده است. به .IR O_ARCH مراجعه کنید. .br این ماکرو را تغییر ندهید. . .TP OSREL نگارش سیستم‌عامل. .br این ماکرو را تغییر ندهید. . .TP P_ARCH این ماکرو شامل معماری پردازنده برای ماشین مقصد است (مانند .IR "mc68020 mc88200 sparc pentium" ). مقدار آن برابر با خروجی دستور .I "uname \-p است که به حروف کوچک تبدیل شده است. روی سیستم‌هایی که در آن‌ها .I P_ARCH در دسترس نیست، مقدار آن برابر با محتوای .IR K_ARCH قرار می‌گیرد. .br این ماکرو را تغییر ندهید. . .TP PARCH این ماکرو شامل معماری پردازنده برای ماشین مقصد است (مانند .IR "mc68020 mc88200 sparc pentium" ). مقدار آن برابر با خروجی دستور .I "uname \-p است که به حروف کوچک تبدیل شده است. روی سیستم‌هایی که در آن‌ها .I P_ARCH در دسترس نیست، مقدار آن برابر با محتوای .IR K_ARCH قرار می‌گیرد. .br این ماکرو را تغییر ندهید مگر اینکه بخواهید کامپایل متقاطع انجام دهید. . .TP RULESDIR مقدار این ماکرو باید قبل از گنجاندن فایل قواعد .I "$(SRCROOT)/$(RULESDIR)/rules.top تنظیم شود. اگر می‌خواهید رفتار نسخه اصلاح‌شده‌ای از .I makefiles را در .IR RULESDIR آزمایش کنید، یک رونوشت از آن را در دایرکتوری دیگری قرار دهید، یک یا چند فایل را در آن تغییر دهید و سپس make را با مقدار متفاوتی از .IR RULESDIR که به آن دایرکتوری جایگزین اشاره دارد، اجرا کنید. . .TP RUNPATH روی سیستم‌هایی که .I LD_RUN_PATH در آن‌ها پشتیبانی می‌شود ارزیابی می‌گردد. این ماکرو شامل مسیر جستجوی پیش‌فرض کتابخانه‌ها برای اهداف پیوند پویا در زمان اجرا است. این مسیر جستجو در داخل فایل هدف ذخیره خواهد شد. این مقدار معمولاً در فایل .I $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults یا .IR $(DEFLTSROOT)/$(DEFLTSDIR)/Defaults.$(O_ARCH) تنظیم می‌شود. توجه داشته باشید که سیستم‌های قدیمی‌تر از .I LD_LIBRARY_PATH نیز برای این منظور استفاده می‌کنند. . .TP SCRFILE این ماکرو باید در یک leaf makefile برای اسکریپت‌های شل تنظیم شود تا فایل مبدا آن اسکریپت را مشخص کند. . .TP SRCFILE این ماکرو باید در یک leaf makefile برای فایل‌های محلی‌سازی‌شده تنظیم شود تا فایل مبدا آن فایل را مشخص کند. . .TP SRCROOT این ماکرو شامل موقعیت نسبی دایرکتوری ریشه مبدا پروژه است. مقدار این ماکرو باید قبل از گنجاندن فایل قواعد .I "$(SRCROOT)/$(RULESDIR)/rules.top تنظیم شود. اگر leaf makefile مربوطه در دو سطح دایرکتوری پایین‌تر از ریشه مبدا قرار دارد، .I SRCROOT باید به .I ../.. تنظیم شود. . .TP SUBARCHDIR می‌تواند برای قرار دادن فایل‌های شیء و هدف در دایرکتوری متفاوتی نسبت به حالت معمول تنظیم شود. ماکروی .I SUBARCHDIR مقدار .IR ARCHDIR را اصلاح خواهد کرد. اگر می‌خواهید هدفی بسازید که برای .I dbx کامپایل شده باشد، می‌توانید استفاده کنید از: .IR "make COPTX=\-g SUBARCHDIR=\-dbx" . . .TP TARGET تمامی makefileهایی که به اهداف کتابخانه‌ای یا زیر-makeها / زیر-دایرکتوری‌ها اشاره ندارند، باید .I TARGET را برابر با نام فایل خروجی عملیات نهایی پیوند تعریف کنند. . .TP TARGETLIB تمامی makefileهایی که برای ساخت کتابخانه‌ها استفاده می‌شوند، باید .I TARGETLIB را برابر با بخش مرکزی نام کتابخانه مقصد تعریف کنند. به‌عنوان مثال اگر می‌خواهید .I libfoo را بسازید، تعریف کنید: .IR "TARGETLIB= foo" . این امر برای این لازم است تا به سیستم‌های‌عامل اجازه دهد قراردادهای نام‌گذاری متفاوتی برای کتابخانه‌ها داشته باشند. اگر در حال ساخت یک کتابخانه غیرمشترک (ایستا) باشید، مثال بالا به نام فایل: .I libfoo.a برای هدف واقعی منجر می‌شود. . .TP TARGETMAN این ماکرو باید در یک leaf makefile برای صفحات راهنما تنظیم شود تا نام پایه آن صفحه راهنما (بدون پسوند) را مشخص کند. . .TP XMK_FILE فایل‌های makefile که مایل به نصب صفحات راهنما هستند باید .I XMK_FILE را به .B Makefile.man تنظیم کنند تا نیازی به نصب یک فایل makefile هدایت نداشته باشند. فایل makefile مشخص‌شده در .I XMK_FILE تنها در صورتی پردازش خواهد شد که .I make با هدف .IR install فراخوانی شود. .SH "شروع به کار (GETTING STARTED)" .PP برای راه‌اندازی یک پروژه جدید، ابتدا دایرکتوری‌های .IR RULES " و " TEMPLATES و تمام محتویات آن‌ها را در دایرکتوری ریشه پروژه کپی کنید. .PP سپس یک makefile سطح بالا، یک فایل .I Defaults و یک فایل .I Targetdirs.archname را درون دایرکتوری ریشه پروژه کپی کنید. .PP سپس دایرکتوری‌های زیر را ایجاد نمایید: .IR cmd "، " lib "، " include . .PP اکنون ایجاد دایرکتوری‌های هدف را مثلاً در زیر دایرکتوری‌های .IR cmd " و " lib آغاز کنید. فراموش نکنید که در هر دایرکتوری گره، یک makefile و یک فایل .I Targetdirs.archname مناسب بسازید. .SH "مثال‌ها (EXAMPLES)" .PP اگر می‌خواهید یک نسخه رونوشت خصوصی از بخش‌هایی از یک پروژه ایجاد کنید، باید دایرکتوری‌ای را درون درخت دایرکتوری خود انتخاب کنید که به دایرکتوری ریشه مبدا پروژه سایه (shadow project) تبدیل شود. سپس پیوندهای نمادینی (symbolic links) با نام‌های .IR RULES " و " TEMPLATES به ریشه مبدا واقعی بسازید. اگر نمی‌خواهید فایل‌های include سراسری را تغییر دهید، یک پیوند نمادین به دایرکتوری .I include نیز ایجاد کنید، در غیر این صورت دایرکتوری include و محتوای آن را کپی کنید. فایل makefile سطح بالا، فایل .I Defaults و فایل .I Targetdirs.archname را کپی کنید. .PP در نهایت زیردرخت مورد نظر را به همراه تمام makefileها و فایل‌های .I Targetdirs.archname موجود در دایرکتوری‌های بالاتر از بخش مورد نظر پروژه کپی کنید. .SH "فایل‌ها (FILES)" \&.\|.\|./RULES/* .br \&.\|.\|./DEFAULTS/* .br \&.\|.\|./TARGETS/* .br \&.\|.\|./TEMPLATES/* .SH "همچنین ببینید (SEE ALSO)" .BR makerules (4)، .BR make (1)، .BR gmake (1)، .BR smake (1). .PP اگر می‌خواهید بدانید چگونه قواعد جدیدی اضافه کنید یا چگونه پشتیبانی از سیستم‌عامل‌ها یا کامپایلرهای جدید را اضافه نمایید، به .BR makerules (4) مراجعه کنید. .SH "تشخیص خطاها (DIAGNOSTICS)" پیام‌های عیب‌یابی به برنامه make بستگی دارند. به صفحه راهنمای مربوطه نگاهی بیندازید. .SH "نکات (NOTES)" دامنه این راهنما تنها کاربرد .BR "leaf makefileها" است. اگر می‌خواهید تغییراتی در .B قواعد make ایجاد کنید، به .BR makerules (4) نگاهی بیندازید. .PP ابزار .I makefiles می‌تواند با .IR "Sunpro make" ، .I "GNU make" و .IR smake استفاده شود. اگرچه Gnu make روی پلتفرم‌های متعددی اجرا می‌شود، اما خروجی اشکال‌زدایی مفیدی ندارد. .PP در صورت بروز مشکل در makefile، از .IR "Sunpro make" " یا " smake استفاده کنید. هر دو برنامه .IR "Sunpro make" " و " smake دارای یک پرچم \-D هستند که به شما امکان می‌دهد makefileها را پس از اولین بسط مشاهده کنید. اگر شک دارید که آیا makefile شما به‌درستی بسط داده می‌شود و آیا قواعد درستی فراخوانی شده‌اند یا خیر، از این گزینه استفاده کنید. همچنین گزینه \-d وجود دارد که هنگام اجرای make خروجی اشکال‌زدایی ارائه می‌دهد. اگر خروجی بیشتری می‌خواهید، از \-dd، \-ddd و موارد مشابه استفاده کنید. .PP برنامه .I Smake دارای گزینه \-xM است که وابستگی فراخوانی‌ها (include dependency) را برای قواعد make به شما نشان می‌دهد. .PP .ne 20 در ادامه فهرستی از تمامی ماکروهایی که در .IR makefiles استفاده می‌شوند آمده است. از آن‌ها استفاده نکنید مگر اینکه معنی آن‌ها قبلاً توضیح داده شده باشد. .PP .BR \-O_ARCH , .BR .OBJDIR , .BR .SEARCHLIST , .BR ALLTARGETS , .BR AR , .BR ARCH , .BR ARCHDIR , .BR ARCHDIRX , .BR ARCH_DONE , .BR ARFLAGS , .BR AS , .BR ASFLAGS , .BR ASMFILES , .BR ASOPTS , .BR ASOPTX , .BR CC , .BR CCOM , .BR CCOM_DEF , .BR CFILES , .BR CFLAGS , .BR CHGRP , .BR CHMOD , .BR CHOWN , .BR CLEAN_FILES , .BR CLEAN_FILEX , .BR CLOBBER_FILEX , .BR COPTDYN , .BR COPTGPROF , .BR COPTOPT , .BR COPTS , .BR COPTX , .BR CPP , .BR CPPFLAGS , .BR CPPOPTS , .BR CPPOPTX , .BR CTAGS , .BR CURDIR , .BR CWARNOPTS , .BR CWOPTS , .BR C_ARCH , .BR DEFAULTSDIR , .BR DEFAULTSROOT , .BR DEFCCOM , .BR DEFCCOM_DEF , .BR DEFINCDIRS , .BR DEFINCDIRS_DEF , .BR DEFINSGRP , .BR DEFINSMODE , .BR DEFINSUSR , .BR DEFUMASK , .BR DEF_ROOT , .BR DEP_DEP , .BR DEP_FILE , .BR DEP_SUFFIX , .BR DIRNAME , .BR DIRS , .BR DYNLD , .BR ETAGS , .BR FLOAT_OPTIONS , .BR HFILES , .BR HOSTNAME , .BR INCDIRS , .BR INSDIR , .BR INSGRP , .BR INSGRP_DEF , .BR INSMODE , .BR INSMODE_DEF , .BR INSTALL , .BR INSUSR , .BR INSUSR_DEF , .BR INS_BASE , .BR INS_KBASE , .BR KARCH , .BR KARCH_DEF , .BR KDEFINES , .BR K_ARCH , .BR LD , .BR LDCC , .BR LDFLAGS , .BR LDLIBS , .BR LDOPTDYN , .BR LDOPTS , .BR LDOPTX , .BR LDPATH , .BR LIBS , .BR LIBS_PATH , .BR LIBX , .BR LIB_KVM , .BR LIB_MATH , .BR LIB_PREFIX , .BR LIB_SOCKET , .BR LIB_SUFFIX , .BR LN , .BR LNDYNLIB , .BR LOCALIZE , .BR LORDER , .BR MAKE , .BR MK_FILES , .BR MAKEPROG , .BR MAKE_ARCH , .BR MAKE_HOST , .BR MAKE_MACH , .BR MAKE_M_ARCH , .BR MAKE_NAME , .BR MAKE_OS , .BR MAKE_OSDEFS , .BR MAKE_OSREL , .BR MANDIR , .BR MANFILE , .BR MANSECT , .BR MANSECT_ADMIN , .BR MANSECT_CMD , .BR MANSECT_DEMOS , .BR MANSECT_DEVICE , .BR MANSECT_DRIVER , .BR MANSECT_FILEFORM , .BR MANSECT_GAMES , .BR MANSECT_HDR , .BR MANSECT_LIB , .BR MANSECT_MACROS , .BR MANSECT_NETWORK , .BR MANSECT_SYSCALL , .BR MANSECT_TABLES , .BR MANSTYLE , .BR MANSUFFIX , .BR MANSUFF_ADMIN , .BR MANSUFF_CMD , .BR MANSUFF_DEMOS , .BR MANSUFF_DEVICE , .BR MANSUFF_DRIVER , .BR MANSUFF_FILEFORM , .BR MANSUFF_GAMES , .BR MANSUFF_HDR , .BR MANSUFF_LIB , .BR MANSUFF_MACROS , .BR MANSUFF_NETWORK , .BR MANSUFF_SYSCALL , .BR MANSUFF_TABLES , .BR MARCH , .BR MARCH_DEF , .BR MKDEP , .BR MKDEP_OUT , .BR MKDIR , .BR MV , .BR M_ARCH , .BR OARCH , .BR OARCHDIR , .BR OFILES , .BR OINCSDIR , .BR OLIBSDIR , .BR OSDEFS , .BR OSNAME , .BR OSREL , .BR O_ARCH , .BR PALLDEP_FILE , .BR PARCH , .BR PARCH_DEF , .BR PASMFILES , .BR PDEP_FILE , .BR PLOFILES , .BR POFILES , .BR PTARGET , .BR PTARGET_BASE , .BR PYOFILES , .BR P_ARCH , .BR RANLIB , .BR RM , .BR RMDEP , .BR RMTARGET , .BR RM_FORCE , .BR RM_RECURS , .BR RM_RF , .BR RULESDIR , .BR RUNPATH , .BR SCRFILE , .BR SHELL , .BR SHL_SUFFIX , .BR SRCFILE , .BR SRCLIBS , .BR SRCROOT , .BR SUBARCH , .BR SUBARCHDIR , .BR SYMLINK , .BR TAGS , .BR TARGET , .BR TARGETLIB , .BR TARGETMAN , .BR TARGET_BASE , .BR TARGET_PATH , .BR TSORT , .BR UMASK , .BR UMASK_DEF , .BR UMASK_VAL , .BR XARCH , .BR XK_ARCH , .BR XMK_FILE , .BR XMAKEPROG , .BR XM_ARCH , .BR XP_ARCH , .BR _CCOM , .BR _DEFAULTSDIR , .BR _DEFCCOM , .BR _DEFINSGRP , .BR _DEFINSMODE , .BR _DEFINSUSR , .BR _DEFUMASK , .BR _DIRNAME , .BR _INCDIRS , .BR _MAKEPROG , .BR _MARCH , .BR _M_ARCH , .BR _O_ARCH , .BR _PARCH , .BR _P_ARCH , .BR _UNIQ , .BR __CCOM , .BR __DEFAULTSDIR , .BR __DEFCCOM , .BR __DEFINSGRP , .BR __DEFINSMODE , .BR __DEFINSUSR , .BR __DEFUMASK , .BR __DIRNAME , .BR __INCDIRS , .BR __MAKEPROG , .BR __MARCH , .BR __M_ARCH , .BR __PARCH , .BR __P_ARCH , .SH "اشکالات (BUGS)" .SH "سلسله‌مراتب درخت منبع (SOURCE TREE HIERARCHY)" .LP طرح کلی زیر مروری سریع بر یک سلسله‌مراتب منبع معمول ارائه می‌دهد: .LP .na .nh .PD 0 .TP .B .../ دایرکتوری ریشه درخت منبع . .RS .TP .B Makefile فایل Makefile اصلی و سطح بالا .TP .B Targetdirs فایلی شامل فهرستی از دایرکتوری‌های مورد نیاز برای آن پروژه. اگر سیستم بسته به معماری سیستم مقصد به فهرست‌های هدف متفاوتی نیاز دارد، از فایل‌های مختص هدف در .B .../TARGETS/ استفاده کنید. .TP \&.\|.\|. .RE . .TP .B .../RULES/ محل قرارگیری makefileها (قواعد فراخوانی‌شده) . .RS .TP .B rules.top قواعد فراخوانی اجباری (مورد نیاز برای تنظیم قواعد پایه) .TP .B rules.aux قواعد مورد نیاز برای نصب یک فایل کمکی غیرمحلی‌سازی‌شده .TP .B rules.cmd قواعد مورد نیاز برای ساخت یک دستور معمولی (مانند ‎/bin/sh) .TP .B rules.drv قواعد مورد نیاز برای ساخت یک درایور دستگاه .TP .B rules.lib قواعد مورد نیاز برای ساخت یک کتابخانه استاندارد (غیرمشترک/ایستا) .TP .B rules.loc قواعد مورد نیاز برای نصب یک فایل کمکی محلی‌سازی‌شده .TP .B rules.man قواعد مورد نیاز برای نصب یک صفحه راهنمای محلی‌سازی‌شده .TP .B rules.scr قواعد مورد نیاز برای نصب یک اسکریپت شل محلی‌سازی‌شده .TP .B rules.shl قواعد مورد نیاز برای ساخت یک کتابخانه مشترک (پویا) .TP .B rules.mks قواعد مورد نیاز برای ساخت بیش از یک هدف در یک دایرکتوری خاص .TP .B rules.dir قواعد مورد نیاز برای ساخت اهدافی که در زیردایرکتوری‌های دایرکتوری فعلی قرار دارند .TP \&.\|.\|. .RE . .TP .B .../DEFAULTS/ تعاریف پیش‌فرض برای معماری‌های مقصد مختلف در این دایرکتوری قرار دارند. الگوهایی برای برخی از معماری‌ها را می‌توان در دایرکتوری .I .../TEMPLATES/ یافت. .RS .TP .B Defaults تعاریف پیش‌فرض برای آن درخت منبع. تعاریف وابسته به سیستم در .B .../DEFAULTS/Defaults.* قرار دارند. .RE .TP .B .../TARGETS/ تعاریف فهرست هدف برای معماری‌های مقصد مختلف در این دایرکتوری قرار دارند. .TP .B .../TEMPLATES/ الگوهایی که باید درون پروژه استفاده شوند (اگر تنها makefile در آن دایرکتوری است نام آن را به Makefile تغییر دهید، و اگر بیش از یک هدف در آن دایرکتوری وجود دارد نام آن را به .I target.mk تغییر دهید) . .RS .TP .B Defaults فایل Defaults برای دایرکتوری ریشه منبع .TP .B Defaults.linux فایل Defaults برای .IR linux . این فایل باید در دایرکتوری .B .../DEFAULTS/ نصب شود. .TP .B Makefile.root فایل Makefile برای دایرکتوری ریشه منبع .TP .B Makefile.aux فایل Makefile برای یک فایل کمکی غیرمحلی‌سازی‌شده .TP .B Makefile.cmd فایل Makefile برای یک دستور معمولی (مانند ‎/bin/sh) .TP .B Makefile.lib فایل Makefile برای یک کتابخانه استاندارد (غیرمشترک) .TP .B Makefile.loc فایل Makefile برای یک فایل کمکی محلی‌سازی‌شده .TP .B Makefile.man فایل Makefile برای یک صفحه راهنمای محلی‌سازی‌شده .TP .B Makefile_de.man فایل Makefile برای یک صفحه راهنمای محلی‌سازی‌شده در لوکال آلمانی .TP .B Makefile.scr فایل Makefile برای یک اسکریپت شل محلی‌سازی‌شده .TP .B Makefile.shl فایل Makefile برای یک کتابخانه مشترک .TP .B Makefile.drv فایل Makefile برای یک درایور دستگاه .TP .B Makefile.mks فایل Makefile برای بیش از یک هدف در یک دایرکتوری خاص .TP .B Makefile.dir فایل Makefile برای اهدافی که در زیردایرکتوری‌های دایرکتوری فعلی قرار دارند .TP \&.\|.\|. .RE . .TP .B .../cmd/ درخت منبع برای دستورات معمولی . .RS .TP .B Makefile فایل makefile برای زیردایرکتوری .I cmd .TP .B Targetdirs.sun4m فایلی شامل فهرستی از دایرکتوری‌ها مانند .I myprog (به زیر مراجعه کنید) که برای آن معماری خاص مورد نیازند. .TP .B myprog/ دایرکتوری محل قرارگیری فایل‌های مبدا یک دستور خاص . .RS .TP Makefile فایل makefile برای .I myprog .TP Makefile.man فایل makefile برای صفحه راهنمای .I myprog .TP mprog.c فایل مبدا برای myprog .TP mprog.tr فایل مبدا troff برای صفحه راهنمای myprog .TP .B OBJ/ دایرکتوری محل قرارگیری زیردایرکتوری‌های مختص سیستم . .RS .TP .B sparc\-sunos5\-cc/ دایرکتوری فایل‌های اجرایی دوتایی (باینری) متعلق به یک سیستم خاص .TP \&.\|.\|. .RE .TP \&.\|.\|. .RE .br .TP \&.\|.\|. .RE .br .ne 5 .TP .B .../lib/ دایرکتوری محل قرارگیری فایل‌های مبدا کتابخانه‌ها . .RS .TP .B Makefile فایل makefile برای زیردایرکتوری .I lib .TP .B Targetdirs.sun4m فایلی شامل فهرستی از دایرکتوری‌ها مانند .I libfoo (به زیر مراجعه کنید) که برای آن معماری خاص مورد نیازند. .TP .B libfoo/ دایرکتوری محل قرارگیری تمامی فایل‌های مبدا برای libfoo .TP \&.\|.\|. .RE . .TP .B .../kernel دایرکتوری برای ماژول‌های هسته . .RS .TP .B Makefile فایل makefile برای زیردایرکتوری .I kernel .TP .B Targetdirs.sun4m فایلی شامل فهرستی از دایرکتوری‌ها مانند .I drv (به زیر مراجعه کنید) که برای آن معماری خاص مورد نیازند. .TP .B drv/ دایرکتوری محل قرارگیری درایورها . .RS .TP .B Makefile فایل makefile برای زیردایرکتوری .I drv .TP .B Targetdirs.sun4m فایلی شامل فهرستی از دایرکتوری‌ها مانند .I mydrv (به زیر مراجعه کنید) که برای آن معماری خاص مورد نیازند. .TP .B mydrv/ فایل مبدا برای یک درایور خاص .TP \&.\|.\|. .RE . .TP \&.\|.\|. .RE . .TP .B .../include دایرکتوری فایل‌های include سراسری که در آن پروژه استفاده می‌شوند . .TP .B .../bins دایرکتوری برنامه‌های باینری که در طول کامپایل پروژه ایجاد می‌شوند یا مورد نیاز هستند .RS .TP .B sparc\-sunos5\-cc/ دایرکتوری فایل‌های باینری متعلق به یک سیستم خاص .TP \&.\|.\|. .RE . .TP .B .../libs دایرکتوری کتابخانه‌هایی که در طول کامپایل پروژه ایجاد می‌شوند یا مورد نیاز هستند .RS .TP .B sparc\-sunos5\-cc/ دایرکتوری کتابخانه‌های متعلق به یک سیستم خاص .TP \&.\|.\|. .RE . .TP .B .../incs دایرکتوری فایل‌های include که در طول کامپایل پروژه ایجاد می‌شوند یا مورد نیاز هستند .RS .TP .B sparc\-sunos5\-cc/ دایرکتوری فایل‌های include متعلق به یک سیستم خاص .TP \&.\|.\|. .RE .TP \&.\|.\|. .RE . .ad .PD .SH "نویسنده (AUTHOR)" .nf J\*org Schilling Seestr. 110 D-13353 Berlin Germany .fi .PP گزارش اشکالات و پیشنهادات را ارسال کنید به: .PP .B joerg@schily.isdn.cs.tu-berlin.de یا .B js@cs.tu-berlin.de یا .B jes@fokus.gmd.de