. \" @(#)makerules.4 1.3 01/04/29 Copyr 1996 J. Schilling . \" System 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 4L "14. February 1997" "J\*org Schilling" "Schily\'s FILE FORMATS" .TH makerules 4L "14. February 1997" "J\*org Schilling" "GMD FOKUS FILE FORMATS" .SH "نام (NAME)" makerules \- قوانین ساخت و پیکربندی سیستم make مبتنی بر شابلون .SH "خلاصه دستور (SYNOPSIS)" .B "SRCROOT= .\|. .br .B "RULESDIR= RULES .br .B "include $(SRCROOT)/$(RULESDIR)/rules.top .br .I "تعاریف محلی در اینجا قرار می‌گیرند .br .B "include $(SRCROOT)/$(RULESDIR)/rules.* .PP برای مقادیر ممکن .BR "rules.*" ، فصل «انواع هدف‌های پشتیبانی‌شده در حال حاضر» را ببینید. .SH "توضیحات (DESCRIPTION)" Makerules مجموعه‌ای از قوانین است که امکان کامپایل و ساخت پروژه‌های ساخت‌یافته را با makefileهای کوچک و دارای ساختار یکنواخت فراهم می‌کند. تمام قوانین در یک دایرکتوری مرکزی قرار دارند. کامپایل پروژه‌ها روی پلتفرم‌های مختلف می‌تواند به‌طور همزمان و بدون نیاز به اصلاح هیچ‌یک از makefileهای موجود در دایرکتوری‌های پروژه‌ها انجام شود. .PP Makerules مجموعه‌ای از ابزارهای سطح بالای سازگاری و انتقال‌پذیری (portability) است که از .B autoconf برتر بوده و استفاده از آن آسان‌تر است. .PP در حال حاضر سه برنامه make پشتیبانی می‌شوند: .IR "Sunpro make" ، .I "GNU make" و .IR smake . اگر می‌خواهید پشتیبانی از برنامه‌های make دیگر را اضافه کنید، بخش‌های مربوط به حداقل نیازمندی‌های یک برنامه make و ساختار سامانه .B "قوانین make" را مطالعه کنید. .PP این راهنما به برنامه‌نویسانی کمک می‌کند که نیاز به اعمال تغییرات روی خود سامانه قوانین make دارند. اگر می‌خواهید درباره نحوه استفاده از .B "سامانه makefile" اطلاعات کسب کنید، به .BR makefiles (4) نگاهی بیندازید. .PP هدف اصلی طراحی این بوده است که هیچ تعریفی در بیش از یک مکان در قوانین make وجود نداشته باشد. این امر بدین معناست که برنامه‌نویسان سیستم که می‌خواهند قوانینی را اضافه یا اصلاح کنند باید از این هدف پیروی نمایند تا عملکرد در بخش‌های دیگر دچار اختلال نشود. .PP نتیجه مشهود برای کاربر، مجموعه‌ای از makefileهای کوچک و خوانا است که هر یک در دایرکتوری برگ (leaf) پروژه قرار دارند و بنابراین .IR leaf -makefile (یا 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 ماکروهایی را تعریف می‌کند که هدف و سورس را شرح می‌دهند. در هر .IR leaf -makefile فقط می‌توانید یک هدف داشته باشید. البته، ممکن است فایل‌های سورس متعددی برای ساخت آن هدف مورد نیاز باشند. اگر می‌خواهید بیش از یک هدف در یک دایرکتوری مشخص بسازید، باید بیش از یک makefile در آن دایرکتوری قرار دهید. این همان بخشی از makefile است که یک هدف یکتا را توصیف می‌کند. این بخش را ویرایش کنید تا شامل تمام فایل‌های سورس، تمام فایل‌های include محلی و تمام فلگ‌های زمان کامپایل غیرسراسری باشد که برای هدف شما مورد نیاز است. برای یک هدف معمولی، این کار به سادگی پر کردن یک فرم است. .TP \(bu در نهایت هر .IR leaf -makefile فایلی را از دایرکتوری قوانین وارد می‌کند که حاوی قوانین مربوط به نوع مناسب هدفی است که قرار است از این .IR leaf -makefile ساخته شود. .PP فایل makefile در هر دایرکتوری باید .IR Makefile نامیده شود. اگر می‌خواهید بیش از یک makefile در یک دایرکتوری مشخص داشته باشید، باید نام‌های متفاوتی را برای سایر makefileها انتخاب کنید. .SH "انواع هدف‌های پشتیبانی‌شده در حال حاضر (CURRENTLY SUPPORTED TARGET TYPES)" .PP قوانینی برای انواع هدف‌های زیر وجود دارد: .TP 20 دستورات (commands) قوانین make برای دستورات سطح کاربر مانند .IR cat ، .I 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 makefileهای منحرف‌شده (diverted makefiles) قوانین make برای پروژه‌هایی که نیاز به داشتن بیش از یک makefile در یک دایرکتوری مشخص دارند در فایل .I rules.mks قرار دارند. این فایل حاوی قانونی است که پردازش را به زیر-makefileهای فهرست‌شده هدایت می‌کند. هر زیر-makefile می‌تواند از هر نوعی باشد. .TP دایرکتوری‌ها (directories) قوانین make برای زیردایرکتوری‌ها در فایل .I rules.dir قرار دارند. .SH "حداقل نیازمندی‌ها برای یک برنامه Make (MINIMUM REQUIREMENTS FOR A MAKE PROGRAM)" قوانین make در حال حاضر از .IR "Sunpro make" ، .I "GNU make" و .IR smake پشتیبانی می‌کنند. اگر می‌خواهید پشتیبانی از برنامه‌های make دیگر را اضافه کنید، آن‌ها باید برخی ویژگی‌های حداقلی فراتر از قابلیت‌های برنامه استاندارد .SM "UNIX .B make داشته باشند. .I BSDmake در صورتی که قوانین تطبیق الگو را به درستی پشتیبانی کند، می‌تواند پشتیبانی شود. .TP 20 وارد کردن (include) برنامه make باید بتواند فایل‌های دیگر را به صورت بازگشتی از درون یک .I makefile وارد کند. نام فایلی که وارد می‌شود باید مجاز باشد که یک ماکرو باشد. برنامه make باید بتواند این کار را به گونه‌ای انجام دهد که اگر فایل مورد نظر نتیجه یک قانون make باشد (مثلاً اگر فایلی که باید وارد شود وجود ندارد یا قدیمی است)، قبل از تلاش برای وارد کردن واقعی آن ساخته شود. .TP الحاق به ماکرو (appending to a macro) یک ارجاع ماکرو به شکل: .sp .B "macro += addval .sp باید .B addval را به رشته‌ای که در حال حاضر در .B macro قرار دارد، الحاق کند. .TP جایگزینی پسوند ماکرو (suffix macro replacement) یک ارجاع ماکرو به شکل: .sp .B "out= $(macro\|:\|string1\|=\|string2) .sp باید یک پسوند .I string1 را به .I string2 در تمام کلمات موجود در .B macro جایگزین کند، که در آن string1 یا یک پسوند است، یا کلمه‌ای که باید در تعریف ماکرو جایگزین شود، و string2 پسوند یا کلمه جایگزین است. .I String1 و .I string2 باید حتی اگر خودشان ماکرو باشند نیز به درستی جایگزین شوند. کلمات در مقدار یک ماکرو با نویسه‌های فاصله (SPACE)، تب (TAB) و خط جدید اسکیپ‌شده از هم جدا می‌شوند. .TP جایگزینی الگوی ماکرو (pattern macro replacement) یک ارجاع ماکرو به شکل: .sp .B "out= $(macro\|:\|op%os\|=\|np%ns) .sp باید یک الگوی مرکزی را در .B macro جایگزین کند، که در آن .B op پیشوند موجود (قدیمی) و .B os پسوند موجود (قدیمی) است، .B np و .B ns به ترتیب پیشوند جدید و پسوند جدید هستند، و الگوی تطبیق‌یافته با % (رشته‌ای از صفر یا چند نویسه)، از مقداری که جایگزین می‌شود به جلو منتقل می‌گردد. به عنوان مثال: .sp .B "PROGRAM=fabricate .br .B "DEBUG= $(PROGRAM:%=tmp/%\-g) .sp مقدار DEBUG را به tmp/fabricate\-g تنظیم می‌کند. .IR Op ، .IR os ، .I np و .I ns باید حتی در صورتی که خودشان ماکرو باشند نیز به درستی جایگزین شوند. .SH "درک الگوریتم‌های پایه (UNDERSTANDING BASIC ALGORITHMS)" یکی از الگوریتم‌های پایه که در سامانه قوانین make استفاده می‌شود، برای تنظیم یک ماکروی تعریف‌نشده به یک مقدار پیش‌فرض تضمین‌شده مورد نیاز است. از آنجا که همه برنامه‌های make از ساختارهای .I "if then else پشتیبانی نمی‌کنند، باید روش متفاوتی به کار گرفته شود. .PP روشی که در .B "قوانین make" استفاده شده است، با استفاده از .B "جایگزینی پسوند ماکرو" و .BR "جایگزینی الگوی ماکرو" پیاده‌سازی می‌شود. .PP .ne 5 ابتدا، ماکرویی که حاوی یک پسوند یکتا است تعریف می‌شود: .sp .B " # Define magic unique cookie .br .B " _UNIQ= .XxZzy\- .sp این ماکرو برای تمام مکان‌هایی که داشتن ماکرویی با مقدار پیش‌فرض تضمین‌شده در آن‌ها ضروری است، استفاده می‌شود. مثال زیر الگوریتم پایه‌ای را نشان می‌دهد که برای پیاده‌سازی این عبارت استفاده شده است: .B اگر .I $(MAKE_NAME) حاوی یک مقدار باشد، .B آنگاه .I $(XMAKEPROG) روی .I $(MAKE_NAME) تنظیم می‌شود، .B در غیر این صورت .I $(XMAKEPROG) روی .I $(MAKEPROG) تنظیم خواهد شد. .sp .B " _MAKEPROG= $(_UNIQ)$(MAKE_NAME) .br .B " __MAKEPROG= $(_MAKEPROG:$(_UNIQ)=$(MAKEPROG)) .br .B " XMAKEPROG= $(__MAKEPROG:$(_UNIQ)%=%) .sp خط اول در این مثال، ماکروی .I _MAKEPROG را روی الحاق مقدار .I MAKE_NAME و .B .XxZzy\- تنظیم می‌کند. اگر ماکروی .I MAKE_NAME در این زمان خالی باشد، .I _MAKEPROG فقط شامل .B .XxZzy\- خواهد بود. .PP در خط دوم، .I __MAKEPROG روی مقدار .I _MAKEPROG تنظیم می‌شود. اگر .I _MAKEPROG فقط شامل .B .XxZzy\- باشد، بدین معناست که .B .XxZzy\- همان پسوند است. سپس این پسوند با مقدار .I MAKEPROG جایگزین می‌شود؛ در این حالت .I __MAKEPROG شامل مقدار تغییرنیافته .I MAKEPROG خواهد بود. اگر .I _MAKEPROG شامل الحاق .B .XxZzy\- و چیز دیگری باشد، .B .XxZzy\- یک پسوند نخواهد بود، بلکه یک پیشوند برای .I _MAKEPROG است و به همین دلیل .I __MAKEPROG شامل مقدار تغییرنیافته .IR _MAKEPROG خواهد بود که الحاقی از .B .XxZzy\- و مقدار .I MAKE_NAME است. .PP در خط سوم، .I XMAKEPROG روی مقدار .I __MAKEPROG تنظیم می‌شود. اگر .I __MAKEPROG در این زمان دارای پیشوند .B .XxZzy\- باشد، .B .XxZzy\- از آن حذف می‌شود. .SH "ساختار نام‌های ماکروی Make (THE STRUCTURE IN MAKE MACRO NAMES)" .PP نام‌های استفاده‌شده برای .B "ماکروهای make" به گونه‌ای ساختار یافته‌اند که امکان استفاده از .BR grep (1) را برای جستجوی نام‌ها در .B "قوانین make" فراهم می‌کنند. برای امکان‌پذیر ساختن این امر، هیچ نامی نباید زیررشته‌ای از نام دیگر باشد. .PP اگر دستوری نیاز به گزینه‌هایی داشته باشد که باید در ماکروها مشخص شوند، یک .B "ماکروی make" وجود دارد که .I XXXFLAGS نامیده می‌شود. این مطابق با قوانین معمول makefile است. ماکروهای داخلی make به نام‌های .I XXXOPTS و .I XXXOPTX وجود دارند که برای .I XXXFLAGS ترکیب خواهند شد: .sp .B "LDFLAGS= $(LDOPTS) $(LDOPTX) .sp که در آن .I XXXOPTS نام ماکرویی است که به صورت داخلی استفاده می‌شود و .I XXXOPTX نام ماکرویی است که می‌تواند از خط فرمان برنامه make استفاده شود. بنابراین .I XXXOPTX برای الحاق به محتوای .I XXXFLAGS استفاده می‌شود. اگر نیاز باشد که مقدار .I XXXFLAGS بازنویسی و جایگزین شود، می‌توان .I XXXOPTS را در فلگ‌های خط فرمان برنامه make استفاده کرد. .SH "ساختار سامانه قوانین Make (THE STRUCTURE OF THE MAKE RULE SYSTEM)" .SS "ساختار قوانین پایه در rules.top (The Structure Of The Basic Rules in rules.top)" فایل .B RULES/rules.top ابتدا یک فایل قانون را وارد می‌کند که به برنامه make مورد استفاده بستگی دارد. نام این فایل .BI RULES/mk\- makeprog .id است که در آن .I makeprog باید با نام واقعی برنامه make جایگزین شود؛ مانند .BR make ، .B gmake یا .BR smake . هدف این فایل راه‌اندازی فهرستی از ماکروها است که سیستمی را که پروژه در حال حاضر روی آن ساخته می‌شود، مشخص می‌کنند. این ماکروها مقادیری دارند که فقط شامل حروف کوچک بوده و موارد زیر را تعریف می‌کنند: .TP 28 معماری پردازنده اگر دو سیستم یک سیستم‌عامل یکسان را اجرا کنند، در صورتی که یک برنامه ساده سطح کاربر برای اجرا روی سیستم دیگر نیازی به کامپایل مجدد نداشته باشد، این یک مقدار یکتا است. مقادیر ممکن عبارتند از .BR sparc ، .B mc68020 و .BR pentium . این خروجی .B "uname \-p" است. مقدار در .B P_ARCH ذخیره می‌شود. .TP معماری هسته اگر دو سیستم ممکن است مقدار یکسانی برای .B P_ARCH داشته باشند، اما یک برنامه سطح کاربر که به شدت به سیستم وابسته است برای اجرا روی سیستم دیگر نیازمند کامپایل مجدد باشد، این دو سیستم دارای معماری‌های هسته متفاوتی هستند. این خروجی .B "uname \-m" است. مقادیر ممکن عبارتند از .BR sun3 ، .B sun4c و .BR sun4m . مقدار در .B K_ARCH ذخیره می‌شود. .TP معماری ماشین یک ماکروی قدیمی که تنها روی سیستم‌های sun مفید است. از این استفاده نکنید؛ به جای آن از .B P_ARCH استفاده کنید. این خروجی .B arch است. مقادیر ممکن عبارتند از .B sun3 و .BR sun4 . مقدار در .B M_ARCH ذخیره می‌شود. .TP نام میزبان نام ماشینی که کامپایل روی آن انجام می‌گیرد. این خروجی .B "uname \-n" است. مقدار در .B HOSTNAME ذخیره می‌شود. .TP نام سیستم‌عامل این خروجی .B "uname \-s" است. مقادیر ممکن عبارتند از .BR sunos ، .BR dgux ، .B hp\-ux و .BR irix . مقدار در .B OSNAME ذخیره می‌شود. .TP نسخه انتشار سیستم‌عامل این خروجی .B "uname \-r" است. مقادیر ممکن عبارتند از .B 5.5 و .BR 4.1.4 . مقدار در .B OSREL ذخیره می‌شود. .PP فایل بعدی که از .B RULES/rules.top وارد می‌شود، .BI RULES/os\- "operating system" .id است. این فایل ماکروهای .B O_ARCH و .B \-O_ARCH را تعریف می‌کند و ممکن است یکی از ماکروهای تعریف‌شده در .BI RULES/mk\- makeprog .id را اصلاح کند. ماکروهای .B O_ARCH و .B \-O_ARCH برای تمایز بین سیستم‌عامل‌های مختلف به کار می‌روند. نام فایل‌های پیکربندی کامپایلر دارای .B \-O_ARCH به عنوان یک بخش مرکزی است. روی برخی از سیستم‌عامل‌ها مانند .B SunOS و .B DG\-UX لازم است بین .B "SunOS 4.x" و .B "SunOS 5.x" یا .B "DG\-UX 3.x" و .B "DG\-UX 4.x" تمایز قائل شد. .PP فایل بعدی که از .B RULES/rules.top وارد می‌شود، .B Defaults است. این فایل ماکروهای .BR DEFCCOM ، .BR DEFINCDIRS ، .BR LDPATH ، .BR RUNPATH ، .B INS_BASE و .B INS_KBASE را تعریف می‌کند. اگر تعاریف روی سیستم‌های مختلف باید متفاوت باشند، این فایل می‌تواند شامل خطی به شکل زیر باشد: .sp .BI include " $(SRCROOT)" /Defaults. $(O_ARCH) .sp تعاریف واقعی سپس باید به این فایل‌ها منتقل شوند. .PP سپس، پس از تنظیم برخی پیش‌فرض‌های داخلی، .B RULES/rules.top فایل پیکربندی کامپایلر را با نام زیر وارد می‌کند: .sp .I $(SRCROOT)/$(RULESDIR)/$(XARCH).rul .sp این فایل شامل تمام موارد ضروری .B وابسته به سیستم است که برای پیکربندی کامپایلر C روی سیستم مربوطه مورد نیاز است. ایجاد یک فایل جدید از ابتدا ایده بدی است. به سایر فایل‌های پیکربندی کامپایلر نگاهی بیندازید و یک فایل مشابه را مطابق نیازهای خود اصلاح کنید. توجه داشته باشید که اساساً دو معیار وجود دارد که در یک فایل پیکربندی کامپایلر مهم هستند. یکی اینکه آیا سیستم از قالب هدر .I ELF استفاده می‌کند یا خیر. دیگری اینکه آیا سیستم از .I "کتابخانه‌های مشترک" استفاده می‌کند یا خیر. .SH "ساختار قوانین ویژه برنامه (THE STRUCTURE OF THE APPLICATION SPECIFIC RULES)" .PP فایل‌های قوانین ویژه برنامه به گونه‌ای طراحی شده‌اند که تمام موارد ضروری مورد نیاز برای آن وظیفه خاص را در بر گیرند. فایل‌های قوانین ویژه برنامه عبارتند از: .TP 25 $(RULES)/rules.aux قوانین برای نصب فایل‌های کمکی غیرمحلی. .TP $(RULES)/rules.cmd قوانین برای دستوراتی مانند .IR sh . .TP $(RULES)/rules.dir قوانین برای زیردایرکتوری‌ها. .TP $(RULES)/rules.drv قوانین برای درایورهای قابل بارگذاری. .TP $(RULES)/rules.lib قوانین برای کتابخانه‌های ایستا (غیرمشترک). .TP $(RULES)/rules.loc قوانین برای نصب فایل‌های کمکی محلی‌سازی‌شده. .TP $(RULES)/rules.man قوانین برای نصب صفحات راهنمای محلی‌سازی‌شده. .TP $(RULES)/rules.mks قوانین برای زیر-makefileها. .TP $(RULES)/rules.mod قوانین برای ماژول‌های stream قابل بارگذاری. .TP $(RULES)/rules.scr قوانین برای نصب اسکریپت‌های شل محلی‌سازی‌شده. .TP $(RULES)/rules.shl قوانین برای کتابخانه‌های مشترک. .SH "درک ساختار سامانه قوانین Make (UNDERSTANDING THE STRUCTURE OF THE MAKE RULE SYSTEM)" .PP برای درک ساختار سامانه .B "قوانین make" در حین اعمال تغییرات، سعی کنید از فلگ .B \-xM در برنامه .B smake استفاده کنید. این فلگ فهرست وابستگی‌های include (یعنی فهرستی که مشخص می‌کند کدام قوانین make از کدام قانون دیگر وارد شده‌اند) را چاپ می‌کند. .PP توجه داشته باشید که برخی از قوانین به برنامه make وابسته هستند. اگر می‌خواهید تغییراتی در این قوانین ایجاد کنید، ممکن است نیاز باشد تعاریف را در فایل‌های قوانین جداگانه، هر کدام برای برنامه make مربوطه، قرار دهید. برای مشاهده چند نمونه، به دایرکتوری .B RULES نگاهی بیندازید. .SH "فایل‌ها (FILES)" \&.\|.\|./RULES/* .br \&.\|.\|./DEFAULTS/* .br \&.\|.\|./TARGETS/* .br \&.\|.\|./TEMPLATES/* .SH "همچنین ببینید (SEE ALSO)" .BR makefiles (4), .BR make (1), .BR gmake (1), .BR smake (1). .SH "عیب‌یابی (DIAGNOSTICS)" پیام‌های عیب‌یابی به برنامه make بستگی دارند. به صفحه راهنمای مربوطه نگاه کنید. .SH "نکات (NOTES)" .PP قوانین make را می‌توان با .IR "Sunpro make" ، .I "Gnu make" و .IR smake استفاده کرد. اگرچه Gnu make روی بسیاری از پلتفرم‌ها اجرا می‌شود، اما خروجی اشکال‌زدایی مفیدی ندارد. .PP اگر با یک makefile مشکل دارید، از .IR "Sunpro make" یا .I smake استفاده کنید. .IR "Sunpro make" و .IR smake ، هر دو گزینه .B \-D را دارند که به شما امکان می‌دهد makefileها را پس از اولین بسط مشاهده کنید. اگر شک دارید که آیا makefile شما به درستی بسط می‌یابد و آیا قوانین مناسب وارد شده‌اند یا خیر، از این گزینه استفاده کنید. همچنین گزینه .B \-d وجود دارد که در حین اجرای make خروجی اشکال‌زدایی ارائه می‌دهد. اگر خروجی بیشتری می‌خواهید، از .BR \-dd ، .B \-ddd و به همین ترتیب استفاده کنید. .PP .I Smake گزینه .B \-xM دارد که وابستگی include را برای قوانین make به شما نشان می‌دهد. .SH "اشکالات (BUGS)" .SH "سلسله‌مراتب درخت سورس (SOURCE TREE HIERARCHY)" .LP طرح کلی زیر یک مرور سریع از یک سلسله‌مراتب سورس معمولی ارائه می‌دهد: .LP .na .nh .PD 0 .TP .B .../ دایرکتوری ریشه درخت سورس . .RS .TP .B Makefile فایل Makefile اصلی ریشه .TP .B Defaults تعاریف پیش‌فرض برای آن درخت سورس. تعاریف وابسته به سیستم در .B .../DEFAULTS/ قرار دارند .TP .B Targetdirs فایلی شامل فهرستی از دایرکتوری‌هایی که برای آن پروژه مورد نیاز هستند. اگر سیستم بسته به معماری سیستم هدف به فهرست‌های هدف متفاوتی نیاز دارد، از فایل‌های مخصوص هدف در .B .../TARGETS/ استفاده کنید .TP \&.\|.\|. .RE . .TP .B .../RULES/ محل قرارگیری makefileها (قوانین واردشده) . .RS .TP .B rules.top قوانین الزامی include (مورد نیاز برای راه‌اندازی قوانین پایه) .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/ یافت. .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