makerules(4L) GMD FOKUS FILE FORMATS makerules(4L)

makerules - قوانین ساخت و پیکربندی سیستم make مبتنی بر شابلون

SRCROOT= ..
RULESDIR= RULES
include $(SRCROOT)/$(RULESDIR)/rules.top
تعاریف محلی در اینجا قرار می‌گیرند
include $(SRCROOT)/$(RULESDIR)/rules.*

برای مقادیر ممکن rules.*، فصل «انواع هدف‌های پشتیبانی‌شده در حال حاضر» را ببینید.

Makerules مجموعه‌ای از قوانین است که امکان کامپایل و ساخت پروژه‌های ساخت‌یافته را با makefileهای کوچک و دارای ساختار یکنواخت فراهم می‌کند. تمام قوانین در یک دایرکتوری مرکزی قرار دارند. کامپایل پروژه‌ها روی پلتفرم‌های مختلف می‌تواند به‌طور همزمان و بدون نیاز به اصلاح هیچ‌یک از makefileهای موجود در دایرکتوری‌های پروژه‌ها انجام شود.

Makerules مجموعه‌ای از ابزارهای سطح بالای سازگاری و انتقال‌پذیری (portability) است که از autoconf برتر بوده و استفاده از آن آسان‌تر است.

در حال حاضر سه برنامه make پشتیبانی می‌شوند: Sunpro make، GNU make و smake. اگر می‌خواهید پشتیبانی از برنامه‌های make دیگر را اضافه کنید، بخش‌های مربوط به حداقل نیازمندی‌های یک برنامه make و ساختار سامانه قوانین make را مطالعه کنید.

این راهنما به برنامه‌نویسانی کمک می‌کند که نیاز به اعمال تغییرات روی خود سامانه قوانین make دارند. اگر می‌خواهید درباره نحوه استفاده از سامانه makefile اطلاعات کسب کنید، به makefiles(4) نگاهی بیندازید.

هدف اصلی طراحی این بوده است که هیچ تعریفی در بیش از یک مکان در قوانین make وجود نداشته باشد. این امر بدین معناست که برنامه‌نویسان سیستم که می‌خواهند قوانینی را اضافه یا اصلاح کنند باید از این هدف پیروی نمایند تا عملکرد در بخش‌های دیگر دچار اختلال نشود.

نتیجه مشهود برای کاربر، مجموعه‌ای از makefileهای کوچک و خوانا است که هر یک در دایرکتوری برگ (leaf) پروژه قرار دارند و بنابراین leaf-makefile (یا makefile برگ) نامیده می‌شوند.

در واقع، هر یک از این leaf-makefileها هیچ قانونی در خود ندارند. آن‌ها صرفاً چند ماکرو برای برنامه make تعریف کرده و دو فایل را از مخزن مرکزی قوانین make وارد (include) می‌کنند. این فایل‌های واردشده، قوانینی را که برای کامپایل پروژه مورد نیاز است تعریف می‌کنند.

هر leaf-makefile به روشی بسیار ساده تشکیل شده است:

•
ابتدا دو ماکرو تعریف می‌کند که مکان نسبی دایرکتوری ریشه پروژه و نام دایرکتوری شامل مجموعه کامل قوانین را مشخص می‌کنند و سپس فایل قانون rules.top را از دایرکتوری که مخزن مرکزی قوانین را تشکیل می‌دهد، وارد می‌کند. شما فقط باید ماکروی SRCROOT را ویرایش کنید تا مکان نسبی دایرکتوری ریشه پروژه را بازتاب دهد.
•
بخش بعدی یک leaf-makefile ماکروهایی را تعریف می‌کند که هدف و سورس را شرح می‌دهند. در هر leaf-makefile فقط می‌توانید یک هدف داشته باشید. البته، ممکن است فایل‌های سورس متعددی برای ساخت آن هدف مورد نیاز باشند. اگر می‌خواهید بیش از یک هدف در یک دایرکتوری مشخص بسازید، باید بیش از یک makefile در آن دایرکتوری قرار دهید. این همان بخشی از makefile است که یک هدف یکتا را توصیف می‌کند. این بخش را ویرایش کنید تا شامل تمام فایل‌های سورس، تمام فایل‌های include محلی و تمام فلگ‌های زمان کامپایل غیرسراسری باشد که برای هدف شما مورد نیاز است. برای یک هدف معمولی، این کار به سادگی پر کردن یک فرم است.
•
در نهایت هر leaf-makefile فایلی را از دایرکتوری قوانین وارد می‌کند که حاوی قوانین مربوط به نوع مناسب هدفی است که قرار است از این leaf-makefile ساخته شود.

فایل makefile در هر دایرکتوری باید Makefile نامیده شود. اگر می‌خواهید بیش از یک makefile در یک دایرکتوری مشخص داشته باشید، باید نام‌های متفاوتی را برای سایر makefileها انتخاب کنید.

قوانینی برای انواع هدف‌های زیر وجود دارد:

دستورات (commands)
قوانین make برای دستورات سطح کاربر مانند cat، ls و غیره در فایل rules.cmd قرار دارند.
درایورها (drivers)
قوانین make برای درایورهای دستگاه در فایل rules.drv قرار دارند.
کتابخانه‌ها (libraries)
قوانین make برای کتابخانه‌های غیرمشترک در فایل rules.lib قرار دارند.
کتابخانه‌های مشترک (shared libraries)
قوانین make برای کتابخانه‌های مشترک در فایل rules.shl قرار دارند.
فایل‌های محلی‌سازی‌شده (localized files)
قوانین make برای فایل‌های محلی‌سازی‌شده در فایل rules.loc قرار دارند.
فایل‌های غیرمحلی‌سازی‌شده (nonlocalized files)
قوانین make برای فایل‌های غیرمحلی در فایل rules.aux قرار دارند.
اسکریپت‌های شل (shell scripts)
قوانین make برای اسکریپت‌های شل (نوعی از فایل‌های محلی‌سازی‌شده) در فایل rules.scr قرار دارند.
صفحات راهنما (manual pages)
قوانین make برای صفحات راهنما (نوعی از فایل‌های محلی‌سازی‌شده) در فایل rules.man قرار دارند.
قوانین make برای پروژه‌هایی که نیاز به داشتن بیش از یک makefile در یک دایرکتوری مشخص دارند در فایل rules.mks قرار دارند. این فایل حاوی قانونی است که پردازش را به زیر-makefileهای فهرست‌شده هدایت می‌کند. هر زیر-makefile می‌تواند از هر نوعی باشد.
دایرکتوری‌ها (directories)
قوانین make برای زیردایرکتوری‌ها در فایل rules.dir قرار دارند.

قوانین make در حال حاضر از Sunpro make، GNU make و smake پشتیبانی می‌کنند. اگر می‌خواهید پشتیبانی از برنامه‌های make دیگر را اضافه کنید، آن‌ها باید برخی ویژگی‌های حداقلی فراتر از قابلیت‌های برنامه استاندارد UNIX make داشته باشند. BSDmake در صورتی که قوانین تطبیق الگو را به درستی پشتیبانی کند، می‌تواند پشتیبانی شود.

وارد کردن (include)
برنامه make باید بتواند فایل‌های دیگر را به صورت بازگشتی از درون یک makefile وارد کند. نام فایلی که وارد می‌شود باید مجاز باشد که یک ماکرو باشد. برنامه make باید بتواند این کار را به گونه‌ای انجام دهد که اگر فایل مورد نظر نتیجه یک قانون make باشد (مثلاً اگر فایلی که باید وارد شود وجود ندارد یا قدیمی است)، قبل از تلاش برای وارد کردن واقعی آن ساخته شود.
الحاق به ماکرو (appending to a macro)
یک ارجاع ماکرو به شکل:

macro += addval

باید addval را به رشته‌ای که در حال حاضر در macro قرار دارد، الحاق کند.

جایگزینی پسوند ماکرو (suffix macro replacement)
یک ارجاع ماکرو به شکل:

out= $(macro:string1=string2)

باید یک پسوند string1 را به string2 در تمام کلمات موجود در macro جایگزین کند، که در آن string1 یا یک پسوند است، یا کلمه‌ای که باید در تعریف ماکرو جایگزین شود، و string2 پسوند یا کلمه جایگزین است. String1 و string2 باید حتی اگر خودشان ماکرو باشند نیز به درستی جایگزین شوند. کلمات در مقدار یک ماکرو با نویسه‌های فاصله (SPACE)، تب (TAB) و خط جدید اسکیپ‌شده از هم جدا می‌شوند.

جایگزینی الگوی ماکرو (pattern macro replacement)
یک ارجاع ماکرو به شکل:

out= $(macro:op%os=np%ns)

باید یک الگوی مرکزی را در macro جایگزین کند، که در آن op پیشوند موجود (قدیمی) و os پسوند موجود (قدیمی) است، np و ns به ترتیب پیشوند جدید و پسوند جدید هستند، و الگوی تطبیق‌یافته با % (رشته‌ای از صفر یا چند نویسه)، از مقداری که جایگزین می‌شود به جلو منتقل می‌گردد. به عنوان مثال:

PROGRAM=fabricate
DEBUG= $(PROGRAM:%=tmp/%-g)

مقدار DEBUG را به tmp/fabricate-g تنظیم می‌کند. Op، os، np و ns باید حتی در صورتی که خودشان ماکرو باشند نیز به درستی جایگزین شوند.

یکی از الگوریتم‌های پایه که در سامانه قوانین make استفاده می‌شود، برای تنظیم یک ماکروی تعریف‌نشده به یک مقدار پیش‌فرض تضمین‌شده مورد نیاز است. از آنجا که همه برنامه‌های make از ساختارهای if then else پشتیبانی نمی‌کنند، باید روش متفاوتی به کار گرفته شود.

روشی که در قوانین make استفاده شده است، با استفاده از جایگزینی پسوند ماکرو و جایگزینی الگوی ماکرو پیاده‌سازی می‌شود.

ابتدا، ماکرویی که حاوی یک پسوند یکتا است تعریف می‌شود:

# Define magic unique cookie
_UNIQ= .XxZzy-

این ماکرو برای تمام مکان‌هایی که داشتن ماکرویی با مقدار پیش‌فرض تضمین‌شده در آن‌ها ضروری است، استفاده می‌شود. مثال زیر الگوریتم پایه‌ای را نشان می‌دهد که برای پیاده‌سازی این عبارت استفاده شده است: اگر $(MAKE_NAME) حاوی یک مقدار باشد، آنگاه $(XMAKEPROG) روی $(MAKE_NAME) تنظیم می‌شود، در غیر این صورت $(XMAKEPROG) روی $(MAKEPROG) تنظیم خواهد شد.

_MAKEPROG= $(_UNIQ)$(MAKE_NAME)
__MAKEPROG= $(_MAKEPROG:$(_UNIQ)=$(MAKEPROG))
XMAKEPROG= $(__MAKEPROG:$(_UNIQ)%=%)

خط اول در این مثال، ماکروی _MAKEPROG را روی الحاق مقدار MAKE_NAME و .XxZzy- تنظیم می‌کند. اگر ماکروی MAKE_NAME در این زمان خالی باشد، _MAKEPROG فقط شامل .XxZzy- خواهد بود.

در خط دوم، __MAKEPROG روی مقدار _MAKEPROG تنظیم می‌شود. اگر _MAKEPROG فقط شامل .XxZzy- باشد، بدین معناست که .XxZzy- همان پسوند است. سپس این پسوند با مقدار MAKEPROG جایگزین می‌شود؛ در این حالت __MAKEPROG شامل مقدار تغییرنیافته MAKEPROG خواهد بود. اگر _MAKEPROG شامل الحاق .XxZzy- و چیز دیگری باشد، .XxZzy- یک پسوند نخواهد بود، بلکه یک پیشوند برای _MAKEPROG است و به همین دلیل __MAKEPROG شامل مقدار تغییرنیافته _MAKEPROG خواهد بود که الحاقی از .XxZzy- و مقدار MAKE_NAME است.

در خط سوم، XMAKEPROG روی مقدار __MAKEPROG تنظیم می‌شود. اگر __MAKEPROG در این زمان دارای پیشوند .XxZzy- باشد، .XxZzy- از آن حذف می‌شود.

نام‌های استفاده‌شده برای ماکروهای make به گونه‌ای ساختار یافته‌اند که امکان استفاده از grep(1) را برای جستجوی نام‌ها در قوانین make فراهم می‌کنند. برای امکان‌پذیر ساختن این امر، هیچ نامی نباید زیررشته‌ای از نام دیگر باشد.

اگر دستوری نیاز به گزینه‌هایی داشته باشد که باید در ماکروها مشخص شوند، یک ماکروی make وجود دارد که XXXFLAGS نامیده می‌شود. این مطابق با قوانین معمول makefile است. ماکروهای داخلی make به نام‌های XXXOPTS و XXXOPTX وجود دارند که برای XXXFLAGS ترکیب خواهند شد:

LDFLAGS= $(LDOPTS) $(LDOPTX)

که در آن XXXOPTS نام ماکرویی است که به صورت داخلی استفاده می‌شود و XXXOPTX نام ماکرویی است که می‌تواند از خط فرمان برنامه make استفاده شود. بنابراین XXXOPTX برای الحاق به محتوای XXXFLAGS استفاده می‌شود. اگر نیاز باشد که مقدار XXXFLAGS بازنویسی و جایگزین شود، می‌توان XXXOPTS را در فلگ‌های خط فرمان برنامه make استفاده کرد.

فایل RULES/rules.top ابتدا یک فایل قانون را وارد می‌کند که به برنامه make مورد استفاده بستگی دارد. نام این فایل RULES/mk-makeprog.id است که در آن makeprog باید با نام واقعی برنامه make جایگزین شود؛ مانند make، gmake یا smake. هدف این فایل راه‌اندازی فهرستی از ماکروها است که سیستمی را که پروژه در حال حاضر روی آن ساخته می‌شود، مشخص می‌کنند. این ماکروها مقادیری دارند که فقط شامل حروف کوچک بوده و موارد زیر را تعریف می‌کنند:

معماری پردازنده
اگر دو سیستم یک سیستم‌عامل یکسان را اجرا کنند، در صورتی که یک برنامه ساده سطح کاربر برای اجرا روی سیستم دیگر نیازی به کامپایل مجدد نداشته باشد، این یک مقدار یکتا است. مقادیر ممکن عبارتند از sparc، mc68020 و pentium. این خروجی uname -p است. مقدار در P_ARCH ذخیره می‌شود.
معماری هسته
اگر دو سیستم ممکن است مقدار یکسانی برای P_ARCH داشته باشند، اما یک برنامه سطح کاربر که به شدت به سیستم وابسته است برای اجرا روی سیستم دیگر نیازمند کامپایل مجدد باشد، این دو سیستم دارای معماری‌های هسته متفاوتی هستند. این خروجی uname -m است. مقادیر ممکن عبارتند از sun3، sun4c و sun4m. مقدار در K_ARCH ذخیره می‌شود.
معماری ماشین
یک ماکروی قدیمی که تنها روی سیستم‌های sun مفید است. از این استفاده نکنید؛ به جای آن از P_ARCH استفاده کنید. این خروجی arch است. مقادیر ممکن عبارتند از sun3 و sun4. مقدار در M_ARCH ذخیره می‌شود.
نام میزبان
نام ماشینی که کامپایل روی آن انجام می‌گیرد. این خروجی uname -n است. مقدار در HOSTNAME ذخیره می‌شود.
نام سیستم‌عامل
این خروجی uname -s است. مقادیر ممکن عبارتند از sunos، dgux، hp-ux و irix. مقدار در OSNAME ذخیره می‌شود.
نسخه انتشار سیستم‌عامل
این خروجی uname -r است. مقادیر ممکن عبارتند از 5.5 و 4.1.4. مقدار در OSREL ذخیره می‌شود.

فایل بعدی که از RULES/rules.top وارد می‌شود، RULES/os-operating system.id است. این فایل ماکروهای O_ARCH و -O_ARCH را تعریف می‌کند و ممکن است یکی از ماکروهای تعریف‌شده در RULES/mk-makeprog.id را اصلاح کند. ماکروهای O_ARCH و -O_ARCH برای تمایز بین سیستم‌عامل‌های مختلف به کار می‌روند. نام فایل‌های پیکربندی کامپایلر دارای -O_ARCH به عنوان یک بخش مرکزی است. روی برخی از سیستم‌عامل‌ها مانند SunOS و DG-UX لازم است بین SunOS 4.x و SunOS 5.x یا DG-UX 3.x و DG-UX 4.x تمایز قائل شد.

فایل بعدی که از RULES/rules.top وارد می‌شود، Defaults است. این فایل ماکروهای DEFCCOM، DEFINCDIRS، LDPATH، RUNPATH، INS_BASE و INS_KBASE را تعریف می‌کند. اگر تعاریف روی سیستم‌های مختلف باید متفاوت باشند، این فایل می‌تواند شامل خطی به شکل زیر باشد:

include $(SRCROOT)/Defaults.$(O_ARCH)

تعاریف واقعی سپس باید به این فایل‌ها منتقل شوند.

سپس، پس از تنظیم برخی پیش‌فرض‌های داخلی، RULES/rules.top فایل پیکربندی کامپایلر را با نام زیر وارد می‌کند:

$(SRCROOT)/$(RULESDIR)/$(XARCH).rul

این فایل شامل تمام موارد ضروری وابسته به سیستم است که برای پیکربندی کامپایلر C روی سیستم مربوطه مورد نیاز است. ایجاد یک فایل جدید از ابتدا ایده بدی است. به سایر فایل‌های پیکربندی کامپایلر نگاهی بیندازید و یک فایل مشابه را مطابق نیازهای خود اصلاح کنید. توجه داشته باشید که اساساً دو معیار وجود دارد که در یک فایل پیکربندی کامپایلر مهم هستند. یکی اینکه آیا سیستم از قالب هدر ELF استفاده می‌کند یا خیر. دیگری اینکه آیا سیستم از کتابخانه‌های مشترک استفاده می‌کند یا خیر.

فایل‌های قوانین ویژه برنامه به گونه‌ای طراحی شده‌اند که تمام موارد ضروری مورد نیاز برای آن وظیفه خاص را در بر گیرند. فایل‌های قوانین ویژه برنامه عبارتند از:

$(RULES)/rules.aux
قوانین برای نصب فایل‌های کمکی غیرمحلی.
$(RULES)/rules.cmd
قوانین برای دستوراتی مانند sh.
$(RULES)/rules.dir
قوانین برای زیردایرکتوری‌ها.
$(RULES)/rules.drv
قوانین برای درایورهای قابل بارگذاری.
$(RULES)/rules.lib
قوانین برای کتابخانه‌های ایستا (غیرمشترک).
$(RULES)/rules.loc
قوانین برای نصب فایل‌های کمکی محلی‌سازی‌شده.
$(RULES)/rules.man
قوانین برای نصب صفحات راهنمای محلی‌سازی‌شده.
$(RULES)/rules.mks
قوانین برای زیر-makefileها.
$(RULES)/rules.mod
قوانین برای ماژول‌های stream قابل بارگذاری.
$(RULES)/rules.scr
قوانین برای نصب اسکریپت‌های شل محلی‌سازی‌شده.
$(RULES)/rules.shl
قوانین برای کتابخانه‌های مشترک.

برای درک ساختار سامانه قوانین make در حین اعمال تغییرات، سعی کنید از فلگ -xM در برنامه smake استفاده کنید. این فلگ فهرست وابستگی‌های include (یعنی فهرستی که مشخص می‌کند کدام قوانین make از کدام قانون دیگر وارد شده‌اند) را چاپ می‌کند.

توجه داشته باشید که برخی از قوانین به برنامه make وابسته هستند. اگر می‌خواهید تغییراتی در این قوانین ایجاد کنید، ممکن است نیاز باشد تعاریف را در فایل‌های قوانین جداگانه، هر کدام برای برنامه make مربوطه، قرار دهید. برای مشاهده چند نمونه، به دایرکتوری RULES نگاهی بیندازید.

.../RULES/*
.../DEFAULTS/*
.../TARGETS/*
.../TEMPLATES/*

makefiles(4), make(1), gmake(1), smake(1).

پیام‌های عیب‌یابی به برنامه make بستگی دارند. به صفحه راهنمای مربوطه نگاه کنید.

قوانین make را می‌توان با Sunpro make، Gnu make و smake استفاده کرد. اگرچه Gnu make روی بسیاری از پلتفرم‌ها اجرا می‌شود، اما خروجی اشکال‌زدایی مفیدی ندارد.

اگر با یک makefile مشکل دارید، از Sunpro make یا smake استفاده کنید. Sunpro make و smake، هر دو گزینه -D را دارند که به شما امکان می‌دهد makefileها را پس از اولین بسط مشاهده کنید. اگر شک دارید که آیا makefile شما به درستی بسط می‌یابد و آیا قوانین مناسب وارد شده‌اند یا خیر، از این گزینه استفاده کنید. همچنین گزینه -d وجود دارد که در حین اجرای make خروجی اشکال‌زدایی ارائه می‌دهد. اگر خروجی بیشتری می‌خواهید، از -dd، -ddd و به همین ترتیب استفاده کنید.

Smake گزینه -xM دارد که وابستگی include را برای قوانین make به شما نشان می‌دهد.

طرح کلی زیر یک مرور سریع از یک سلسله‌مراتب سورس معمولی ارائه می‌دهد:

.../
دایرکتوری ریشه درخت سورس
فایل Makefile اصلی ریشه
تعاریف پیش‌فرض برای آن درخت سورس. تعاریف وابسته به سیستم در .../DEFAULTS/ قرار دارند
فایلی شامل فهرستی از دایرکتوری‌هایی که برای آن پروژه مورد نیاز هستند. اگر سیستم بسته به معماری سیستم هدف به فهرست‌های هدف متفاوتی نیاز دارد، از فایل‌های مخصوص هدف در .../TARGETS/ استفاده کنید
...
.../RULES/
محل قرارگیری makefileها (قوانین واردشده)
قوانین الزامی include (مورد نیاز برای راه‌اندازی قوانین پایه)
قوانین مورد نیاز برای نصب یک فایل کمکی غیرمحلی
قوانین مورد نیاز برای ساخت یک دستور معمولی (مانند ‎/bin/sh)
قوانین مورد نیاز برای ساخت یک درایور دستگاه
قوانین مورد نیاز برای ساخت یک کتابخانه استاندارد (غیرمشترک)
قوانین مورد نیاز برای نصب یک فایل کمکی محلی‌سازی‌شده
قوانین مورد نیاز برای نصب یک صفحه راهنمای محلی‌سازی‌شده
قوانین مورد نیاز برای نصب یک اسکریپت شل محلی‌سازی‌شده
قوانین مورد نیاز برای ساخت یک کتابخانه مشترک
قوانین مورد نیاز برای ساخت بیش از یک هدف در یک دایرکتوری مشخص
قوانین مورد نیاز برای ساخت هدف‌هایی که در زیردایرکتوری‌های دایرکتوری جاری قرار دارند
...
.../DEFAULTS/
تعاریف پیش‌فرض برای معماری‌های مختلف هدف در این دایرکتوری قرار دارند. شابلون‌های برخی از معماری‌ها را می‌توان در دایرکتوری .../TEMPLATES/ یافت.
.../TARGETS/
تعاریف فهرست هدف برای معماری‌های مختلف هدف در این دایرکتوری قرار دارند.
.../TEMPLATES/
شابلون‌هایی که باید در داخل پروژه استفاده شوند (اگر تنها makefile در آن دایرکتوری است به Makefile تغییر نام دهید، و اگر بیش از یک هدف در آن دایرکتوری وجود دارد به target.mk تغییر نام دهید)
فایل Defaults برای دایرکتوری ریشه سورس
فایل Defaults برای linux. این باید در دایرکتوری .../DEFAULTS/ نصب شود.
فایل Makefile برای دایرکتوری ریشه سورس
فایل Makefile برای یک فایل کمکی غیرمحلی
فایل Makefile برای یک دستور معمولی (مانند ‎/bin/sh)
فایل Makefile برای یک کتابخانه استاندارد (غیرمشترک)
فایل Makefile برای یک فایل کمکی محلی‌سازی‌شده
فایل Makefile برای یک صفحه راهنمای محلی‌سازی‌شده
فایل Makefile برای یک صفحه راهنمای محلی‌سازی‌شده در لوکال آلمانی
فایل Makefile برای یک اسکریپت شل محلی‌سازی‌شده
فایل Makefile برای یک کتابخانه مشترک
فایل Makefile برای یک درایور دستگاه
فایل Makefile برای بیش از یک هدف در یک دایرکتوری مشخص
فایل Makefile برای هدف‌هایی که در زیردایرکتوری‌های دایرکتوری جاری قرار دارند
...
.../cmd/
درخت سورس برای دستورات عادی
فایل makefile برای زیردایرکتوری cmd
فایلی شامل فهرستی از دایرکتوری‌ها مانند myprog (به زیر نگاه کنید) که برای آن معماری خاص مورد نیاز هستند.
دایرکتوری محل قرارگیری سورس‌های یک دستور خاص
فایل makefile برای myprog
فایل makefile برای صفحه راهنمای myprog
سورس برای myprog
سورس troff برای صفحه راهنمای myprog
دایرکتوری محل قرارگیری زیردایرکتوری‌های ویژه سیستم
دایرکتوری باینری‌های متعلق به یک سیستم خاص
...
...
...
.../lib/
دایرکتوری محل قرارگیری سورس‌های کتابخانه‌ها
فایل makefile برای زیردایرکتوری lib
فایلی شامل فهرستی از دایرکتوری‌ها مانند libfoo (به زیر نگاه کنید) که برای آن معماری خاص مورد نیاز هستند.
دایرکتوری محل قرارگیری تمام فایل‌های سورس libfoo
...
.../kernel
دایرکتوری ماژول‌های هسته
فایل makefile برای زیردایرکتوری kernel
فایلی شامل فهرستی از دایرکتوری‌ها مانند drv (به زیر نگاه کنید) که برای آن معماری خاص مورد نیاز هستند.
دایرکتوری محل قرارگیری درایورها
فایل makefile برای زیردایرکتوری drv
فایلی شامل فهرستی از دایرکتوری‌ها مانند mydrv (به زیر نگاه کنید) که برای آن معماری خاص مورد نیاز هستند.
سورس برای یک درایور خاص
...
...
.../include
دایرکتوری برای فایل‌های include سراسری که در آن پروژه استفاده می‌شوند
.../bins
دایرکتوری برای برنامه‌های باینری که حین کامپایل پروژه ایجاد شده یا مورد نیاز هستند
دایرکتوری باینری‌های متعلق به یک سیستم خاص
...
.../libs
دایرکتوری برای کتابخانه‌هایی که حین کامپایل پروژه ایجاد شده یا مورد نیاز هستند
دایرکتوری کتابخانه‌های متعلق به یک سیستم خاص
...
.../incs
دایرکتوری برای فایل‌های include که حین کامپایل پروژه ایجاد شده یا مورد نیاز هستند
دایرکتوری فایل‌های include متعلق به یک سیستم خاص
...
...

Joerg Schilling
Seestr. 110
D-13353 Berlin
Germany

گزارش اشکالات و پیشنهادات را ایمیل کنید به:

joerg@schily.isdn.cs.tu-berlin.de یا js@cs.tu-berlin.de یا jes@fokus.gmd.de

14. February 1997 Joerg Schilling