.\" Copyright (c) 1993, 1994, 1998 The Open Group .\" .\" Permission to use, copy, modify, distribute, and sell this software and its .\" documentation for any purpose is hereby granted without fee, provided that .\" the above copyright notice appear in all copies and that both that .\" copyright notice and this permission notice appear in supporting .\" documentation. .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of The Open Group shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from The Open Group. .\" .de EX .RS .nf .ft CW .. .de EE .ft .fi .RE .. .TH IMAKE 1 2009-06-22 "imake 1.0.11" .SH "نام (NAME)" imake \- رابط پیش‌پردازنده C برای ابزار make .SH "خلاصه دستور (SYNOPSIS)" \fBimake\fP [ \fB\-D\fP\fIdefine\fP ] [ \fB\-I\fP\fIdir\fP ] [ \fB\-U\fP\fIdefine\fP ] [ \fB\-T\fP\fItemplate\fP ] [ \fB\-f\fP \fIfilename\fP ] [ \fB\-C\fP \fIfilename\fP ] [ \fB\-s\fP \fIfilename\fP ] [ \fB\-e\fP ] [ \fB\-v\fP ] .SH "توضیحات (DESCRIPTION)" ابزار .B Imake برای تولید \fIMakefile\fPها از روی یک قالب (template)، مجموعه‌ای از توابع ماکروی \fBcpp\fP و یک فایل ورودی به ازای هر دایرکتوری به نام \fIImakefile\fP به کار می‌رود. این سازوکار اجازه می‌دهد تا وابستگی‌های وابسته به ماشین (مانند گزینه‌های کامپایلر، نام‌های جایگزین دستورات و قواعد خاص \fBmake\fP) از توصیف مؤلفه‌های مختلفی که باید ساخته شوند، جدا نگه داشته شوند. .SH "گزینه‌ها (OPTIONS)" گزینه‌های خط فرمان زیر را می‌توان به \fBimake\fP ارسال کرد: .TP 8 .BI \-D define این گزینه مستقیماً به \fBcpp\fP ارسال می‌شود. معمولاً برای تنظیم متغیرهای مختص هر دایرکتوری استفاده می‌شود. به عنوان مثال، سامانه پنجره X (X Window System) از این پرچم برای تنظیم \fBTOPDIR\fP به نام دایرکتوری حاوی ریشه توزیع اصلی و \fBCURDIR\fP به نام دایرکتوری جاری نسبت به ریشه استفاده می‌کرد. .TP 8 .BI \-I directory این گزینه مستقیماً به \fBcpp\fP ارسال می‌شود. معمولاً برای مشخص کردن دایرکتوری‌ای که قالب و فایل‌های پیکربندی \fBimake\fP در آن قرار دارند، به کار می‌رود. .TP 8 .BI \-U define این گزینه مستقیماً به \fBcpp\fP ارسال می‌شود. معمولاً برای لغو تعریف متغیرها در هنگام اشکال‌زدایی فایل‌های پیکربندی \fBimake\fP استفاده می‌شود. .TP 8 .BI \-T template این گزینه نام فایل قالب اصلی مورد استفاده توسط \fBcpp\fP را تعیین می‌کند (که معمولاً در دایرکتوری مشخص‌شده با \fB\-I\fP قرار دارد). پیش‌فرض \fBImake.tmpl\fP است. .TP 8 .BI \-f " filename" این گزینه نام فایل ورودی مختص هر دایرکتوری را مشخص می‌کند. پیش‌فرض \fBImakefile\fP است. .TP 8 .BI \-C " filename" این گزینه نام فایل \fI.c\fP ساخته‌شده در دایرکتوری جاری را مشخص می‌کند. پیش‌فرض \fBImakefile.c\fP است. .TP 8 .BI \-s " filename" این گزینه نام فایل توصیف \fBmake\fP تولیدی را مشخص می‌کند، بدون اینکه \fBmake\fP اجرا شود. اگر \fIfilename\fP یک خط تیره (\-) باشد، خروجی در \fIstdout\fP نوشته می‌شود. حالت پیش‌فرض، تولید \fBMakefile\fP بدون اجرای آن است. .TP 8 .B \-e این گزینه مشخص می‌کند که \fBimake\fP باید \fIMakefile\fP تولیدشده را اجرا کند. پیش‌فرض این است که اجرای آن به کاربر واگذار شود. .TP 8 .B \-v این گزینه مشخص می‌کند که \fBimake\fP باید خط فرمان \fBcpp\fP مورد استفاده برای تولید \fIMakefile\fP را چاپ کند. .SH "نحوه کارکرد (HOW IT WORKS)" دستور \fBImake\fP، برنامه \fBcpp\fP را همراه با هرگونه پرچم \fB\-I\fP یا \fB\-D\fP ارسال‌شده در خط فرمان فراخوانی کرده و نام فایلی حاوی ۳ سطر زیر را به آن ارسال می‌کند: .EX \& #define IMAKE_TEMPLATE "Imake.tmpl" \& #define INCLUDE_IMAKEFILE \& #include IMAKE_TEMPLATE .EE که در آن \fBImake.tmpl\fP و \fBImakefile\fP می‌توانند به ترتیب با گزینه‌های خط فرمان \fB\-T\fP و \fB\-f\fP جایگزین شوند. .PP قالب \fBIMAKE_TEMPLATE\fP معمولاً فایلی حاوی پارامترهای وابسته به ماشین (مشخص‌شده به صورت نمادهای \fBcpp\fP)، یک فایل پارامترهای مختص سایت، یک فایل تعریف متغیرها، یک فایل حاوی توابع ماکروی \fBcpp\fP برای تولید قواعد \fBmake\fP، و در نهایت \fIImakefile\fP (مشخص‌شده با \fBINCLUDE_IMAKEFILE\fP) در دایرکتوری جاری را فراخوانی می‌کند. فایل \fIImakefile\fP از این توابع ماکرو برای تعیین اهدافی که باید ساخته شوند استفاده می‌کند؛ سپس \fBimake\fP وظیفه تولید قواعد مناسب را بر عهده می‌گیرد. .PP فایل‌های پیکربندی .B Imake شامل دو نوع متغیر هستند: متغیرهای imake و متغیرهای make. متغیرهای imake هنگام اجرای .B imake توسط cpp تفسیر می‌شوند. بر اساس قرارداد، این متغیرها به صورت ترکیبی از حروف بزرگ و کوچک (mixed case) نوشته می‌شوند. متغیرهای make برای تفسیر بعدی توسط .B make درون .B Makefile نوشته می‌شوند. بر اساس قرارداد، متغیرهای make با حروف بزرگ (upper case) نوشته می‌شوند. .PP فایل قواعد (که معمولاً در دایرکتوری پیکربندی \fBImake.rules\fP نام دارد) شامل انواع توابع ماکروی \fBcpp\fP است که متناسب با بستر جاری پیکربندی شده‌اند. \fBImake\fP هر بار وقوع رشته «@@» را با یک خط جدید (newline) جایگزین می‌کند تا امکان تعریف ماکروهایی که بیش از یک خط از قواعد \fBmake\fP را تولید می‌کنند فراهم شود. برای مثال، ماکروی .EX \&#define program_target(program, objlist) @@\e program: objlist @@\e $(CC) \-o $@ objlist $(LDFLAGS) .EE هنگامی که به شکل زیر فراخوانی شود: .B "program_target(foo, foo1.o foo2.o)" به این صورت بسط می‌یابد: .EX foo: foo1.o foo2.o $(CC) \-o $@ foo1.o foo2.o $(LDFLAGS) .EE .PP همچنین \fBImake\fP هر بار وقوع کلمه «XCOMM» را با نویسه «#» جایگزین می‌کند تا امکان قرار دادن کامنت در Makefile بدون ایجاد خطاهای «invalid directive» از سوی پیش‌پردازنده فراهم شود. .PP برخی ماکروهای پیچیده \fBimake\fP نیازمند تولید متغیرهای \fBmake\fP هستند که مختص هر بار فراخوانی ماکرو باشند، اغلب به این دلیل که مقدار آن‌ها به پارامترهای ارسال‌شده به ماکرو بستگی دارد. چنین متغیرهایی را می‌توان با استفاده از یک متغیر \fBimake\fP به شکل \fBXVARdef\fP\fIn\fP ایجاد کرد که در آن \fIn\fP یک رقم تکی است. در این حالت یک متغیر \fBmake\fP یکتا جایگزین خواهد شد. تکرارهای بعدی متغیر \fBXVARuse\fP\fIn\fP با متغیر ایجادشده توسط \fBXVARdef\fP\fIn\fP متناظر جایگزین می‌شوند. .PP در سامانه‌هایی که \fBcpp\fP آن‌ها چندین نویسه tab و فاصله متوالی را به یک فاصله تبدیل می‌کند، \fBimake\fP تلاش می‌کند تا تب‌های لازم را بازگرداند (\fBmake\fP نسبت به تفاوت میان tab و فاصله بسیار حساس است). به همین دلیل، دونقطه‌ها (:) در خطوط فرمان باید با یک بک‌اسلش (\\) همراه باشند. .SH "استفاده با سامانه پنجره X (USE WITH THE X WINDOW SYSTEM)" سامانه پنجره X تا نسخه X11R6.9 از \fBimake\fP به طور گسترده، هم برای ساخت‌های کامل درون درخت منبع و هم برای نرم‌افزارهای خارجی، استفاده می‌کرد. از نسخه X11R7.0 به بعد، X سامانه ساخت خود را به GNU autoconf و automake تغییر داد، اما همچنان imake را برای ساخت برنامه‌های خارجی موجود که هنوز تبدیل نشده‌اند، نگهداری می‌کند. .PP همان‌طور که در بالا اشاره شد، دو متغیر ویژه به نام‌های \fBTOPDIR\fP و \fBCURDIR\fP تنظیم می‌شوند تا ارجاع به فایل‌ها با استفاده از مسیرهای نسبی آسان‌تر شود. برای مثال، دستور زیر به طور خودکار برای ساخت \fBMakefile\fP در دایرکتوری \fBlib/X/\fP (نسبت به ریشه سورس‌کدها) تولید می‌شود: .EX % ../.././config/imake \-I../.././config \\ \-DTOPDIR=../../. \-DCURDIR=./lib/X .EE هنگام ساخت برنامه‌های X در خارج از درخت منبع، نماد ویژه \fBUseInstalled\fP تعریف شده و \fBTOPDIR\fP و \fBCURDIR\fP نادیده گرفته می‌شوند. اگر فایل‌های پیکربندی به درستی نصب شده باشند، می‌توان از اسکریپت \fBxmkmf\fP(1) استفاده کرد. .SH "فایل‌های ورودی (INPUT FILES)" در ادامه خلاصه‌ای از فایل‌های خوانده‌شده توسط .B imake به ترتیبی که در X استفاده می‌شوند، آورده شده است. میزان تورفتگی نشان می‌دهد که کدام فایل‌ها فایل‌های دیگر را شامل (include) می‌شوند. .EX Imake.tmpl generic variables site.def site-specific, BeforeVendorCF defined *.cf machine-specific *Lib.rules shared library rules site.def site-specific, AfterVendorCF defined Imake.rules rules Project.tmpl X-specific variables *Lib.tmpl shared library variables Imakefile Library.tmpl library rules Server.tmpl server rules Threads.tmpl multi-threaded rules .EE .LP توجه داشته باشید که \fBsite.def\fP دو بار گنجانده می‌شود؛ یک بار قبل از فایل \fI*.cf\fP و یک بار پس از آن. اگرچه بیشتر سفارشی‌سازی‌های سایت باید بعد از فایل \fI*.cf\fP مشخص شوند، برخی از آن‌ها مانند انتخاب کامپایلر، باید پیش از آن مشخص گردند زیرا ممکن است تنظیمات سایر متغیرها به آن‌ها وابسته باشد. .LP اولین باری که \fBsite.def\fP گنجانده می‌شود، متغیر \fBBeforeVendorCF\fP تعریف شده و در بار دوم، متغیر \fBAfterVendorCF\fP تعریف می‌شود. تمام کدها در \fBsite.def\fP باید درون یک #ifdef برای یکی از این نمادها قرار داشته باشند. .SH "متغیرهای محیطی (ENVIRONMENT VARIABLES)" متغیرهای محیطی زیر را می‌توان مقداردهی کرد، با این حال استفاده از آن‌ها توصیه نمی‌شود زیرا وابستگی‌هایی ایجاد می‌کنند که در هنگام اجرای \fBimake\fP به راحتی آشکار نیستند: .TP 5 .B IMAKEINCLUDE در صورت تعریف، یک آرگومان «\-I» را برای ارسال به پیش‌پردازنده C مشخص می‌کند؛ مانند «\-I/usr/X11/config». .TP 5 .B IMAKECPP در صورت تعریف، باید یک مسیر معتبر به برنامه پیش‌پردازنده باشد؛ مانند «/usr/local/cpp». به طور پیش‌فرض، .B imake بسته به پیکربندی مختص سیستم‌عامل، از .B cc \-E یا .BR /usr/bin/cpp استفاده خواهد کرد. .TP 5 .B IMAKEMAKE در صورت تعریف، باید یک مسیر معتبر به یک برنامه make باشد، مانند «/usr/local/make». به طور پیش‌فرض، .B imake از هر برنامه .B make که با استفاده از .BR execvp (3) یافت شود استفاده خواهد کرد. این متغیر تنها در صورتی استفاده می‌شود که گزینه «\-e» مشخص شده باشد. .SH "فایل‌ها (FILES)" .TP .B Imakefile.c فایل ورودی موقت برای cpp .TP .BI /tmp/Imf. XXXXXX فایل Makefile موقت برای گزینه -s .TP .BI /tmp/IIf. XXXXXX فایل Imakefile موقت در صورتی که Imakefile مشخص‌شده از کامنت‌های # استفاده کند .TP .B /usr/bin/cpp پیش‌پردازنده پیش‌فرض C .SH "همچنین ببینید (SEE ALSO)" .BR cpp (1), .BR make (1), .BR xmkmf (1) .TP Paul DuBois .I imake-Related Software and Documentation, http://www.snake.net/software/imake-stuff .TP Paul DuBois .I Software Portability with imake, Second Edition, O'Reilly & Associates, 1996. .TP S. I. Feldman, .I Make \(em A Program for Maintaining Computer Programs .SH "نویسندگان (AUTHORS)" Todd Brunhoff، Tektronix و MIT Project Athena؛ Jim Fulton، MIT X Consortium