این دستور jmake است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
jmake - یک سازنده فایل عمومی
خلاصه
jmake [ cpp گزینه های ]
شرح
جی میک از یک توصیف سطح نسبتاً بالا که در a نگهداری می شود یک فایل میکفایل می سازد Jmafile فایل.
فایل تولید شده یک است Makefile.SH به جای یک میکفایل ساده، یعنی آماده است
برای استفاده همراه با متاکونفیگ به طور خاص، پارامترهایی مانند "where to
install executables" به طور خودکار توسط مجموعه و فقط مورد نیاز
پارامترها در نظر گرفته خواهد شد.
برای استفاده jmake شما باید بنویسید Jmafile اول، که نحوه قرار گرفتن اشیا را توصیف می کند
ساخته شده. شما Jmafile از طریق C pre- در داخل یک الگوی عمومی گنجانده می شود
پردازنده این بدان معنی است که شما می توانید از نظرات معمول C /**/ استفاده کنید، اما از پوسته # استفاده نکنید.
نظرات. نظرات C در ایجاد شده ظاهر نمی شوند Makefile.SH اما شروع خطوط
با ;# در نهایت به عنوان نظرات پوسته ظاهر می شود. اگر باید رشته /* را در قسمت بنویسید
تولید Makefile.SH سپس باید از آن فرار کنید (در غیر این صورت jmake به آن به عنوان فکر خواهد کرد
شروع یک نظر C). به سادگی یک # در مقابل *، مانند /#* قرار دهید.
شما مجموعه ای از ماکروها را در اختیار دارید و همه این ماکروها در فهرست فهرست شده اند.
فایل، همراه با قطعه کدی که به آن گسترش خواهند یافت. معمولا، الف Jmafile منصفانه است
کوچک و در نتیجه نگهداری آسان تر از یک بزرگ است Makefile. برخی از دستورات قدرتمند داخلی
به شما این امکان را می دهد که بدون نیاز به تلاش زیاد، فایل های قابل حمل را به راحتی بنویسید.
زیرا شخص دیگری قبلاً کار را برای شما انجام داده است :-).
وقتی می خواهید فایل میک خود را ایجاد کنید، معمولا اجرا نمی کنید jmake اما استفاده از jmkmf
اسکریپتی که یک wrapper است و فراخوانی می کند jmake با گزینه های صحیح
تمام دانش از jmake در دو فایل نگهداری می شود: قالب Jmake.tmpl و کلان
فایل تعریف Jmake.rules. فایل اول شامل فایل دوم، همراه با
Jmafile. گاهی اوقات لازم است بدانید که چیزها چگونه کار می کنند تا بتوانید به درستی از آنها استفاده کنید
تمامی امکانات ارائه شده برای مثال، ممکن است مجبور شوید قوانین خود را برای a بنویسید
پروژه خاص اگرچه نمی توانید قوانین از پیش تعریف شده را بازنویسی کنید، اما می توانید آن را گسترش دهید
Jmake.rules فایل یا به سادگی ماکروهای خود را در خود اضافه کنید Jmafile. شما همچنین ممکن است استفاده کنید #include
زمانی که میخواهید این ماکروها را به اشتراک بگذارید و نمیخواهید کد را تکرار کنید، بیان میشود.
نحو در Jmake.rules به هیچ وجه زیبا نیست، اما:
- تجزیه آن آسان است (مانند فایل های sendmail.cf یا troff).
- قرار نیست قوانین زیاد تغییر کنند.
- آنقدر ساده است که در پنج دقیقه تسلط پیدا کنید. :-)
در اینجا یک توضیح کوچک است:
1) برخورد با انواع مختلف cpp پیاده سازی ها:
· نهایی @!\ یعنی: انتهای خط، خط بعدی از حاشیه سمت چپ شروع می شود.
· نهایی @@\ یعنی: انتهای خط، خط بعدی باید با یک برگه تورفتگی داشته باشد.
همیشه باید یکی از @!\ یا @@\ در انتهای هر خط وجود داشته باشد. تنها
استثنا برای ماکروهایی است که قرار است به عنوان بخشی از یک بدنه قانون استفاده شوند (مثلاً
RemoveTargetProgram). در آن صورت، خط اول (که دارای #تعريف كردن) باید
با یک بک اسلش خاتمه دهید.
2) تعاریف نماد:
· >SYMBOL: نماد را تعریف می کند.
· ؟سمبل: : نگه می دارد اگر SYMBOL تعریف شده باشد.
· ٪سمبل: : نگه می دارد اگر SYMBOL تعریف نشده باشد.
?SYM می تواند تودرتو باشد (AND منطقی)، مانند:
?SYMBOL:%TOKEN:text
که اگر SYMBOL تعریف شده باشد و TOKEN تعریف نشده باشد، متن را حفظ می کند. برای اجرای الف
منطقی یا، به زیر مراجعه کنید.
3) تست های هدف ایجاد فایل:
·هدف?: : نگه می دارد اگر هدف تعریف شده است.
· %هدف%: : نگه می دارد اگر هدف تعریف نشده است.
یک فایل اصلاحی هدف به عنوان یک هدف مستقل تعریف می شود، به عنوان مثال
وابسته.محلی هدف، که به صورت زیر تعریف می شود:
depend.local:
همچنین توجه داشته باشید که فقط برای اهداف تعریف شده معتبر است so بسیار در تولید شده
makefile این محمولی نیست که بتوان از آن برای آزمایش اهداف استفاده کرد
در نهایت بعداً در نسل تعریف خواهد شد.
4) دستورات:
دستورات را می توان به jmake. آنها با یک "|" پیشرو شروع می کنند. دستورات موجود
هستند:
· |پسوند : اضافه می کند به لیست .SUFFIXES: در makefile.
· |قانون: : اضافه می کند به بخش قوانین ساختمان
· |قانون: : مانند قبل، با یک برگه پیشرو.
· | skip: متن را پرش می کند تا زمانی که خطی که با '-skip' شروع می شود پیدا شود.
· |subst: قسمتی را آغاز می کند که در آن خطوط در معرض جایگزینی متغیر قرار می گیرند،
تا زمانی که "-subst" پیدا شود. این بدان معنی است که وقتی Makefile.SH اجرا می شود، همه
نمونه های $var در داخل جایگزین بخش با پوسته جایگزین خواهد شد.
· |پوسته: بخش را منتشر می کند تا زمانی که "-شل" همانطور که در تولید شده مطابقت داشته باشد
Makefile.SH. این می تواند برای آماده سازی مفید باشد | مورد بخش ها این نیست
مجاز به لانه سازی صدف بخش.
· |case: این دستور باید با نام متغیر پوسته (بدون آن
علامت "$" پیشرو) و یک الگوی موردی، به عنوان مثال رشته "var in
f*". تست "مورد" مربوطه را در Makefile.SH روی ایجاد می کند
مقدار "$var" و تنها در صورتی که این تست درست باشد، بخش تا زمانی که
زمانی که Makefile.SH اجرا می شود، «-case» مطابقت در Makefile ایجاد می شود. آی تی
امکان لانه سازی وجود دارد مورد آزادانه بخش
· |گسترش : خطوط را گسترش دهید تا با '-expand' . تکمیل شده
مثال در زیر نشان داده شده است.
· | یکبار : متن تا "-once" فقط اولین بار ظاهر می شود.
'|' دستورات را نمی توان تو در تو قرار داد، مگر اینکه به گونه دیگری ذکر شده باشد. به طور خاص، به دلیل
اجرای ساده | پرش، قرار دادن آن غیر ممکن است | پرش داخل یک پرش شده
بخش با این حال، الف | یکبار بخش ممکن است داشته باشد | پرش بخش ها اجازه لانه سازی دارد
| مورد بخش ها به میل خود
در اینجا راهی برای پیاده سازی یک OR منطقی وجود دارد:
/* SYMBOL را اجرا می کند یا نه TOKEN */
?SYMBOL:text /* اگر SYMBOL */ متن را نگه می دارد
%SYMBOL:|پرش
%TOKEN:text /* اگر TOKEN نباشد متن را نگه می دارد */
-پرش
در واقع، این زشت است، زیرا متن باید دو بار ظاهر شود. خوشبختانه انجام دادم
از آن ساختار استفاده نکنید :-)
در واقع، همانطور که مطمئناً قبلاً حدس زده اید، بهترین راه برای اجرای یک OR منطقی است
استفاده از قانون دی مورگان است:
نه (p یا q) <=> نه p و نه q
/* SYMBOL را اجرا می کند یا نه TOKEN (تلاش شماره 2) */
%SYMBOL:?TOKEN:|پرش
متن /* اگر SYMBOL یا نه TOKEN */
-پرش
کی گفته منطق براشون مهم نیست؟ ;-)
گسترش با انجام می شود گسترش فرمان برای اجتناب از برخی ارائه شده است
نوشته های دست و پا گیر در فایل های آرایشی زمانی که مجبورید فقط چند خط احمقانه را تکرار کنید
به عنوان مثال در نام فایل ها متفاوت است. ابتدا به یک مثال نگاه می کنیم:
|بسط یک!foo bar! ب!بله نه!
!آ::
اکو !a، !b
-بسط دادن
سپس دو قانون چاپ می شود و مقادیر (a,b) برای اولی (foo,
بله)، برای دوم (نوار، خیر). تعویض توسط "!" کنترل می شود. شخصیت.
اگر کلمه ای که باید جایگزین شود بخشی از کلمه دیگری است، با ساختار ^^ جدا کنید
مانند: !b^^c. امکان استفاده از ماکروهای Makefile در ، و آنها
توسط jmake گسترش خواهد یافت. اگر این چیزی نیست که شما می خواهید، از اولین علامت "$" فرار کنید
(این یک فرار از Makefile است، یعنی باید «$» را دو برابر کنید، نه اینکه قبل از آن
اسلش). A // مخفف مقدار جایگزینی تهی است.
ساختار ^^^ مانند ^^ رفتار می کند، یعنی حذف می شود، اما هر چیزی را نیز حذف می کند.
زیر فضای سفید بعد از ^^^. اگر چیزی را به یک آرگومان کلان اضافه کنید،
و آن آرگومان ماکرو با فاصله های قبل از آن نوشته شده است، سپس این به شما اجازه می دهد
چیزی را درست قبل از مقدار نهایی آن آرگومان به هم الحاق کنید.
در اینجا مثال دیگری وجود دارد که نشان می دهد چگونه می توان از ماکرو Expand استفاده کرد. این است
تعریف شده در Jmake.rules عنوان:
#define Expand(قاعده، الگو) @!
|گسترش الگو @!
قانون @!
-بسط دادن
بنابراین می توانیم در آن بنویسیم Jmafile:
| پرش
A = نوار فو
-پرش
#قانون را تعریف کنید @!
$(DIR)/!a^^.o: !a^^.o @@
$(CC) -c !a^^.c @@
$(MV) !a^^.o $(DIR)
Expand(Rule, a!$(A)!)
که در تولید خواهد شد Makefile.SH:
$(DIR)/foo.o: foo.o
$(CC) -c foo.c
$(MV) foo.o $(DIR)
$(DIR)/bar.o: bar.o
$(CC) -c bar.c
$(MV) bar.o $$(DIR)
اعلامیه A احاطه شده است تماس با ما، به طوری که در ظاهر نمی شود
Makefile.SH را ایجاد کرد، اما توسط آن در نظر گرفته خواهد شد jmake برای
جایگزینی در الگو
تعداد بسط با تعداد مقادیر ممکن برای تعیین می شود
اول پارامتر. اگر پارامترهای دیگر مقادیر جایگزینی کمتری داشته باشند، دریافت خواهند کرد
باطل
اضافه کردن یک عبارت منظم در انتهای "-expand" امکان پذیر است. این منظم
عبارت از مجموعه نهایی بسط در انتهای هر خط حذف خواهد شد.
همچنین می توان در آیتم بسط یافته با استفاده از نحو، جایگزینی انجام داد
(اگر 'f' متغیر گسترش یافته باشد) !f:= جایی که و دو تا معمولی هستند
عبارات (بدون فاصله). الگو با الگو جایگزین خواهد شد
(فقط اولین مورد جایگزین خواهد شد).
در نهایت، می توانید در بخش توسعه یافته به متغیرهایی که مقدار آنها محاسبه شده است مراجعه کنید
از طریق یک بسط دیگر، که تعریف عمومی را آسان می کند Jmakefiles.
مثال:
SRC = foo.c bar.c
OBJ =
|f!$(SRC) را گسترش دهید!
!f:\.c=\.o
-بسط دادن \
INC =
|f!$(OBJ) را گسترش دهید!
!f:\.o=\.h
-بسط دادن \
که در تولید خواهد شد Makefile.SH:
SRC = foo.c bar.c
OBJ =
foo.o
bar.o
INC =
foo.h
bar.h
فراموش نکنید که در عبارات منظم خود از کاراکترهای خاص محافظت کنید
اسلش، نقطه و غیره...
La یک بار فرمان با یک نام تگ شده است. اولین بار که نام ظاهر می شود، یک بار
ساختار نادیده گرفته می شود و متن تا "-یک بار" در متن تولید شده کپی می شود
Makefile.SH. با این حال، اتفاقات آینده با همین نام نادیده گرفته خواهد شد (یک بار
مانند رفتار خواهد کرد تماس با ما).
مثال:
|یک بار this_is_a_name
-یک بار
La صدف دستور را می توان برای تولید یک قطعه پوسته در Makefile.SH استفاده کرد. برای
به عنوان مثال، بخش زیر در Jmakefile:
|پوسته
مورد "$d_usegtk1" در
تعریف) glib=1; gtk=1;;
که C
-پوسته
باعث می شود که تولید قطعه محصور شده در Makefile.SH محاسبه شود
مقادیر سلیس و چرب زبان و gtk متغیرها بر اساس متغیر پیکربندی
d_usegtk1 با اجرای Configure تنظیم کنید.
به نوبه خود، این می تواند در موارد بعدی استفاده شود مورد بخش هایی برای فعال کردن بخش هایی از
Makefile فقط هنگام ساخت GTK1 با استفاده از glib-1.x:
|جلو قاب در 1
نمایش دادن:
echo "Building for glib-1.x"
-مورد
این بخش چیزی شبیه به این را در Makefile.SH ایجاد می کند:
!نه!زیر!
مورد "$glib" در
1)
$spitshell >>Makefile <<'!NO!SUBS!'
نمایش دادن:
echo "Building for glib-1.x"
!نه!زیر!
;;
که C
$spitshell >>Makefile <<'!NO!SUBS!'
و هنگام اجرای Makefile.SH، قانون "نمایش" بالا فقط زمانی ظاهر می شود
ساختمان برای glib-1.x. فرم فینال makefile بنابراین می تواند به
گزینه های پیکربندی انتخاب شده است مجموعه اجرا شد.
5) مقداردهی اولیه:
· + : کل خط را در قسمت مقداردهی اولیه قرار می دهد.
· ++SYMBOL : اضافه می کند به ماکرو SYMBOL.
6) متغیرهای تعریف شده توسط کاربر:
کاربر ممکن است CFLAGS، LDFLAGS یا DPFLAGS را به عنوان پرچم های اضافی برای استفاده در C تعریف کند.
کامپایل، فاز پیوند یا هدف وابسته. بنابراین امکان اضافه کردن مقداری اضافی وجود دارد
پرچم هایی مانند -I یا کتابخانه های Makefiles در زیرمجموعه های خاص.
با استفاده از خدمات onworks.net از jmake آنلاین استفاده کنید