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