انگلیسیفرانسویاسپانیایی

Ad


فاویکون OnWorks

makepp_functions - آنلاین در ابر

makepp_functions را در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا کنید.

این دستور makepp_functions است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


makepp_functions -- توابع در makepp

شرح


A: absolute_filename،
absolute_filename_nolink،
آبسپات،
افزودن پیشوند،
پسوند اضافه،
و، B: نام پایه، C: زنگ زدن، D: dir ،
dir_noslash، E: خطا ، F: فایل سابست،
فیلتر ،
فیلتر کردن،
filter_out_dirs،
Findfile
find_first_upwards،
پیدا_برنامه،
رشته یاب،
پیدا_بالا،
first_available
کلمه ی اول،
برای هر، I: اگر ،
اگر حقیقت دارد،
استنتاج_پیوند دهنده،
استنتاج_اشیاء،
اطلاعات ، J: پیوستن، M: ساخت ،
نقشه آرایشی،
میپرل،
نقشه، نقشه
"mktemp"، N: notdir، O: only_generated,
only_nontargets
only_phony_targets
فقط_کهنه،
only_هدف ها،
و یا،
اصل و نسب، P: patsubst،
پرل،
ساختگی،
پیش ساخت،
چاپ، R: مسیر واقعی،
نسبی_نام فایل،
نسبت_به، S: پوسته،
مرتب سازی،
نوار ،
فرعی،
پسوند، T: موقت، W: هشدار ،
عام،
کلمه،
فهرست لغت،
کلمات ، X: سارقین

هر عبارتی از قالب "$(name)"، که در آن "name" نام یک متغیر نیست، یا
"$(name arg1 arg2 arg3)" به عنوان یک فراخوانی تابع تفسیر می شود. نام ممکن است حاوی حروف باشد،
زیرخط یا خط فاصله؛ برای جلوگیری از سردرگمی، می توانید از خط تیره یا زیرخط استفاده کنید
به جای هم، زیرا خط تیره های داخلی به زیرخط تبدیل می شوند. ارزیابی چنین
یک عبارت به سادگی یک زیربرنامه پرل را فرا می خواند. اگر "name" قبل از "&" باشد، آن را اجرا می کند
دستور یا اسکریپت ساخته شده با آن نام در فرآیند makepp، و استاندارد را برمی گرداند
خروجی این نیاز به ساخت perl برای PerlIO دارد. اگر نام یک تابع را نام نبرد
به فراخوانی فراخوانی تبدیل می شود.

همانند متغیرها، می‌توانید «$(name ...)» یا «${name ...}» را انتخاب کنید. اگر شما می خواهید
همان پرانتز را جاسازی کنید، باید جفت شود، دیگری مهم نیست: "$(name
...(){..." یا "${name ...{}(...}". (اما برای map و perl اولین پرانتز بسته به پایان می رسد.
عبارت.) دو برابر کردن به آرگومان ها اجازه می دهد تا چندین خط را در بر گیرند. خطوط جدید هستند
سپس به عنوان فاصله در نظر گرفته می شود، به جز شاید در "تعریف". همچنین نحو "$[name ...]" وجود دارد.
یا $[[name ...]]، که در حین خواندن makefile، قبل از قوانین grokking ارزیابی می شود
و سازه های دیگر

Makepp تعدادی توابع داخلی دارد که ممکن است مفید باشد. تقریباً همه را پشتیبانی می کند
توابع متنی ساخت گنو (برای جزئیات به مستندات ساخت گنو مراجعه کنید) و برخی از آن
خود را شما می توانید زیربرنامه های پرل را برای انجام هر کاری که دوست دارید تعریف کنید. عبارت "sub" را ببینید
و بخش گسترش makepp برای جزئیات بیشتر.

مشروط توابع
و شرط 1[، شرط2[، شرط3...]]
تابع و یک عملیات AND "اتصال کوتاه" را فراهم می کند. هر استدلال است
به ترتیب گسترش یافته است. اگر یک آرگومان به یک رشته خالی گسترش یابد، پردازش متوقف می شود و
نتیجه گسترش رشته خالی است. اگر همه آرگومان ها به غیر
رشته خالی است، سپس نتیجه بسط، بسط آخرین آرگومان است.

if رشته، result-if-string-not-blank[, نتیجه-اگر-رشته-خالی]
اگر درست است رشته، result-if-string-true[, نتیجه-اگر-رشته-نادرست]
جایگزینی برای گزاره های «ایفق» و غیره. اگر رشته خالی نباشد (یعنی
شرط درست است)، آرگومان دوم (بند "سپس") برگردانده می شود (بعد از
بسط متغیر)؛ اگر رشته خالی باشد، آرگومان سوم (بند "دیگر") است
برگشت

به عنوان مثال،

CFLAGS := $(اگر $(gcc egcc را فیلتر کنید، $(CC))، -g -Wall، -g)

اگر متغیر CC یا "gcc" یا "egcc" باشد، CFLAGS را "-g -Wall" تعریف می کند، و "-g"
در غیر این صورت. (این کاری است که قوانین ساخت پیش فرض انجام می دهند.)

"iftrue" شبیه "if" است، با این تفاوت که رشته 0 خالی در نظر گرفته می شود.

or شرط 1[، شرط2[، شرط3...]]
تابع یا یک عملیات OR "اتصال کوتاه" را ارائه می دهد. هر استدلال بسط می یابد،
به ترتیب. اگر آرگومان به یک رشته غیر خالی گسترش یابد، پردازش متوقف می شود و
نتیجه بسط آن رشته است. اگر بعد از بسط همه آرگومان ها، همه از
آنها false (خالی) هستند، سپس نتیجه بسط، رشته خالی است.

پرونده و نام فایل توابع
absolute_filename فایل ها
آبسپات فایل ها
نام فایل های نسبی را به مطلق بدون تبدیل می کند . or ... مثلا،
"$(absolute_filename xyz.c)" ممکن است "/usr/src/our_project/subdir/xyz.c" را برگرداند.

absolute_filename_nolink فایل ها
مسیر واقعی فایل ها
absolut_filename را دوست دارد، اما تضمین می کند که پیوندهای نمادین حل و فصل شوند.

نام اصلی نام فایل ها
نام پایه کل نام فایل (با فهرست)، منهای متن بعد از و است
از جمله آخرین دوره به عنوان مثال، "$(basename myfile/version-1.0-module.c)" است
"myfile/version-1.0-module"

دیر نام فایل ها
بخش دایرکتوری هر فایل را در لیست نام فایل، از جمله دنباله، استخراج می کند
بریده بریده اگر دایرکتوری در نام فایل وجود نداشته باشد، "./" را برمی گرداند.

dir_noslash نام فایل
مانند "$(dir )" با این تفاوت که اسلش انتهایی را بر نمی گرداند.

فایل subst الگو، جایگزین، کلمات
یک جایگزین الگو در نام فایل ها انجام دهید. این با patsubst در آن تفاوت دارد
زمانی که نام های جایگزین برای دایرکتوری ها داده شود (تا زمانی که
آنها قبل از علامت درصد قرار دارند). مثلا،

$(filesubst ./src/%.c، %.o، $(src/*.c))

با filesubst کار می کند اما با patsubst کار نمی کند.

filter_out_dirs نام فایل ها
همه نام فایل هایی که به دایرکتوری ها ارجاع نمی دهند را برمی گرداند.

Findfile نام فایل، مسیر
فایلی را در مسیر مشخص شده یا در متغیر محیطی PATH در صورتی که هیچ چیز وجود ندارد، پیدا می کند
مشخص شده. این می تواند برای یافتن فایل های باینری یا گنجاندن فایل ها مفید باشد. مثلا،

TCL_INCLUDE := -I$(dir_noslash $(findfile tcl.h, \
/usr/local/stow/tcl-8.4.5-nothread/include \
/usr/include/tcl8.4 /usr/include/tcl \
/net/na1/tcl8.4a3/include /net/na1/tcl8.4a3/include))

این فایل را مکان یابی می کند tcl.h با جستجو در تمام دایرکتوری های بالا. مطلق
مسیر فایل برگردانده می شود. سپس "$(dir_noslash )" آن دایرکتوری و آن را استخراج می کند
در مسیر include قرار می گیرد.

Find_program نام
اولین برنامه لیستی که در PATH یافت می شود را برگردانید. این مفید است
زمانی که چندین برنامه معادل وجود دارد که ممکن است استفاده شود، و شما فقط می خواهید
یکی از آنها را انتخاب کنید به عنوان مثال، در اینجا تعریف پیش فرض چند مشترک است
متغیرهایی که makepp در صورت عدم قرار دادن آن در فایل میک آن را تامین می کند:

CC = $(find_program gcc egcc pgcc c89 cc) # و بیشتر، بسته به دستگاه
F77 = $(find_program f77 g77 fort77)
CXX = $(find_program g++ c++ pg++ cxx CC aCC)

اگر هیچ یک از برنامه ها یافت نشد، "$(find_program )" رشته not-found را برمی گرداند، و
آنچه را که پیدا نشد ثبت می کند. این معمولا منجر به ایجاد یک فایل کاربردی کاربردی نمی شود، اما این کار را انجام می دهد
تمایل به ایجاد پیام های خطای بهتری دارد. به عنوان مثال، اگر شما کاری مشابه انجام دهید
این:

%o : %c
$(CC) $(ورودی ها) -o $(خروجی ها)

و makepp نمی تواند یک کامپایلر C را در لیست بالا پیدا کند، آن را جایگزین not-found می کند.
در غیر این صورت پوسته سعی می کند فایل منبع و خطای حاصل را اجرا کند
پیام ممکن است واقعا عجیب باشد

find_upwards نام فایل
فایلی با نام داده شده را در دایرکتوری جستجو می کند ., .., ../ ..، ../../..، و غیره،
تا زمانی که فایل پیدا شود یا به دایرکتوری ریشه رسیده یا دایرکتوری قرار گیرد
در یک سیستم فایل متفاوت (این آخرین نیاز برای جلوگیری از مشکلات است
automounters یا فایل سیستم های شبکه آویزان شده است.) اگر شما یک RootMakeppfile، آن نیز است
مانعی که از جستجوی بالاتر جلوگیری می کند.

به عنوان مثال، اگر پروژه ای با سطوح مختلف زیر شاخه ها دارید، می توانید
این قطعه مشترک را در همه فایل‌های ایجاد شده بگنجانید (به عنوان مثال، با استفاده از "include"
بیانیه):

TOP_LEVEL_INCLUDE_DIR := $(find_upwards شامل)
# دایرکتوری را جستجو می کند که حاوی
# شامل زیر شاخه است.

%o : %c
$(CC) $(CFLAGS) -I$(TOP_LEVEL_INCLUDE_DIR) -c $(ورودی) -o $(خروجی)

مشکل دیگری که "find_upwards" می تواند به حل آن کمک کند، مکان یابی دایرکتوری سطح بالا است
از یک ساخت اغلب مفید است که متغیری مانند این تعریف شود:

برترین := ../../..

اگر اطلاعات مهمی دارید که فقط در دایرکتوری سطح بالا قرار دارد. ولی
حفظ این سخت است، زیرا تعداد ".." برای سطوح مختلف متفاوت است
درخت دایرکتوری درعوض، می‌توانید از «find_upwards» برای پیدا کردن یک فایل استفاده کنید
شناخته شده است که فقط در دایرکتوری سطح بالا وجود دارد. برای مثال، فرض کنید که
فایل "LICENSE" فقط در دایرکتوری سطح بالا قرار دارد. سپس می توانید این کار را انجام دهید:

TOP := $(dir_noslash $(find_upwards LICENSE))

"$(find_upwards LICENSE)" مسیر کامل فایل مجوز را برمی‌گرداند.
"$(dir_noslash ...)" نام فایل را حذف می‌کند و فقط فهرست را برمی‌گرداند.

(توجه داشته باشید که عبارت «include» به طور خودکار فایل‌ها را به سمت بالا جستجو می‌کند، بنابراین وجود دارد
نیازی به انجام چنین کاری نیست:

شامل $(find_upwards top_level_rules.mk)

در عوض، شما فقط می توانید انجام دهید

شامل top_level_rules.mk باشد

و به همین خوبی کار خواهد کرد.)

اگر فایل پیدا نشد، "find_upwards" ساخت را با یک پیام خطا لغو می کند.

اگر بیش از یک فایل را مشخص کنید، find_upwards اولین مورد را جستجو می کند
دومی و غیره به عبارت دیگر،

$(find_upwards file1 file2)

برابر است با

$(fild_upwards file1) $(find_upwards file2)

اگر می خواهید به دنبال هر یک از فایل ها بگردید، به جای آن از "find_first_upwards" استفاده کنید.

find_first_upwards file1 file2 ...
این تابع مانند "find_upwards" عمل می کند با این تفاوت که اولین فایل هر کدام را برمی گرداند
فایل های موجود در لیستی که پیدا می کند. به طور خاص، دایرکتوری فعلی را بررسی می کند
هر یک از فایل های موجود در لیست، و اولین فایلی که وجود دارد یا می تواند ساخته شود را برمی گرداند.
اگر هیچ یک از فایل ها وجود نداشته باشد یا در آن دایرکتوری قابل ساخت نباشد، بررسی می شود ..، و سپس
../ ..و غیره، تا زمانی که به دایرکتوری ریشه یا دایرکتوری که هست برسد
در یک سیستم فایل متفاوت قرار دارد.

first_available file1 file2 ...
اولین فایل موجود در لیست موجود یا قابل ساخت را برگردانید. این می تواند مفید باشد برای
تطبیق فایل‌های خود برای کار بر روی چندین ماشین یا شبکه مختلف، که در آن
فایل های مهم ممکن است در مکان های مختلفی قرار داشته باشند. به عنوان مثال، در اینجا یک خط از
یکی از فایل های شخصی من:

TCL_LIB = $(first_available \
/usr/local/stow/tcl-8.4.5-nothread/lib/libtcl8.4.so \
/usr/lib/libtcl8.4.so /usr/lib/libtcl.so \
/net/na1/tcl8.4a3/lib/libtcl8.4.a \
‎/net/na1/tcl8.4a3/lib/libtcl8.4.sl)

این خط کتابخانه Tcl را در همه مکان‌های بالا بررسی می‌کند و در آن توقف می‌کند
اولین موردی که پیدا می کند سپس دستور link شامل $(TCL_LIB) می‌شود، بنابراین ما آن را دریافت می‌کنیم
کتابخانه Tcl مناسب

استنتاج_پیوند file1 file2 ...
با دادن لیستی از فایل های شی، اگر هنوز ساخته نشده اند، ابتدا آنها را بسازید. سپس پیدا کنید
آیا آنها به یک منبع Fortran، C++ یا C وابسته هستند و متناظر را برمی گردانند
کامپایلر (که بهتر از "ld" می داند چگونه پیوند دهد).

استنتاج_اشیاء file1 file2 ... الگو
$(infer_objects object1.o object2.o، *.o)

اگر از قراردادهای استاندارد در مورد نام فایل‌های هدر استفاده می‌کنید، makepp قادر است
حدس زدن کدام فایل ".o" یا ".lo" باید با برنامه شما پیوند داده شود. من از این استفاده می کنم
فایل‌ها را از دایرکتوری کتابخانه‌ای که حاوی ماژول‌های مختلف است، انتخاب کنید
برنامه ها. به جای ساختن یک فایل کتابخانه ای ".a" و داشتن پیوند دهنده آن را انتخاب کنید
ماژول های مربوطه، makepp می تواند ماژول های مربوطه را برای شما انتخاب کند. فقط از این طریق
ماژول های مربوطه کامپایل می شوند.

الگوریتم Makepp برای استنتاج وابستگی های شیء به قراردادی بستگی دارد که
پیاده سازی تمام کلاس ها یا توابع تعریف شده در یک فایل هدر "xyz.h" هستند
در یک فایل شی به نام "xyz.o" (یا "xyz.lo") کامپایل شده است. بنابراین الگوریتم makepp برای
استنباط وابستگی های شی با یک یا چند شی که می دانیم باید باشند شروع می شود
به برنامه پیوند داده شده است. به نظر می رسد که کدام فایل ها با "#include" در گنجانده شده اند
آن منابع، و سعی می کند فایل های شی متناظر را برای هر یک از شامل پیدا کند
فایل های.

"$(infer_objects )" باید در لیست وابستگی یک برنامه ذکر شود، مانند
این:

myprog: $(infer_objects main.o other_object.o، \
***/*.o /other/library/dirs/**/*.o)
$(CXX) $(ورودی ها) -o $(خروجی) $(LIBS)

تابع "$(infer_objects)" دو آرگومان می گیرد (که با کاما از هم جدا شده اند، همانطور که نشان داده شده است).
اولین مورد یک یا چند فایل شی است که مشخص شده است مورد نیاز هستند (کارت های عام هستند
در اینجا مجاز است). مورد دوم لیستی از اشیاء ممکن است (به طور معمول از a استفاده می کنید
wildcard در اینجا) که در صورت لزوم می توان به آن پیوند داد. مقدار بازگشتی از این
تابع لیستی است که ابتدا شامل تمام اشیاء در آرگومان اول و
سپس بعد از آن، تمام اشیاء اضافی که در آرگومان دوم موجود بود
که توسط اشیاء در آرگومان اول مورد نیاز است.

برای مثال، فرض کنید "main.o" از "main.cpp" آمده است، که شامل "my_class.h" است.
"$(infer_objects)" به دنبال فایل هایی با نام "my_class.o" می گردد. اگر دقیقا یکی از اینهاست
فایل پیدا شد، به لیست اضافه شد. (اگر دو فایل شی "my_class.o" پیدا شد
در دایرکتوری های مختلف، یک پیام هشدار چاپ می شود.) "infer_objects" نیز
"my_class.cpp" را بررسی می کند تا ببیند شامل چه مواردی است و فایل های شی اضافی چه هستند
ضمنی.

mktemp
mktemp پیشوند
mktemp پیشوندXXX
mktemp /
نام فایل موقت غیرقابل پیش بینی را برمی گرداند که در حال حاضر وجود ندارد. بدون نام
اشاره به یک فایل دو بار، حتی با مسیرهای نسبی متفاوت، بازگردانده می شود.
در یک اجرا makepp (به جز احتمالاً با ساخت بازگشتی سنتی، یا اگر Perl
کد اجرا شده در یک عمل قانون "f_mktemp" را فراخوانی می کند). در پایان makepp اجرا همه
فایل‌های بازگردانده شده توسط این تابع، در صورت وجود حذف می‌شوند (دوباره به جز آن‌ها
توسط این تابع در کد پرل که در یک قانون اجرا می شود، بازگردانده می شود).

هر تعداد حرف بزرگ "X" در انتهای آرگومان با این تعداد جایگزین می شود
حروف و ارقام تصادفی هر چه تعداد آنها بیشتر باشد، احتمال برخورد آن کمتر است
با سایر فرآیندها، بنابراین اگر پیشوندی مانند " بدهید/tmp/abc."، شما باید به اندازه کافی داشته باشید
"X" ها اگر بیش از یک X وجود داشته باشد، اولین کاراکتر از شناسه فرآیند می آید. اگر
هیچ کدام وجود ندارد، انگار ده نفر وجود دارد، که ظاهراً کافی است (8.4e17
امکانات یا 3.7e15 در ویندوز). اگر هیچ آرگومانی وجود نداشته باشد، پیشوند به صورت پیش فرض در نظر گرفته می شود
"tmp"در فهرست فعلی.

توجه داشته باشید که نمی‌خواهید چنین نامی را به عنوان اهداف و وابستگی‌های قوانین انتخاب کنید. در
نتیجه صحیح خواهد بود، اما هر بار که makepp را اجرا می کنید، دوباره ایجاد می شود.

همچنین، از آنجایی که همیشه متفاوت است، فقط در صورت استفاده باید از آن در یک عمل قانون استفاده کنید
":build_check ignore_action":

TMPFILE ;= $(mktemp) # 1 call; "=" به معنای 3 تماس: 3 فایل است
A-count B-count: :build_check ignore_action
produce-As-and-Bs >$(TMPFILE)
&grep -c /A/ $(TMPFILE) -o A-count
&grep -c /B/ $(TMPFILE) -o B-count

یا باید آن را صادر کنید و اجازه دهید شل آن را ارزیابی کند:

صادرات TMPFILE ;= $(mktemp)
A-count B-count:
produce-As-and-Bs >$$TMPFILE # makepp مقدار var را نمی بیند
fgrep -c A $$TMPFILE >A-count
fgrep -c B $$TMPFILE >B-count

آخرین فرم مقدار بازگشتی قبلی را تکرار می کند، بنابراین می توانید از آن در یک قانون الگو استفاده کنید:

%x: %y
&grep foo $(ورودی) -o $(mktemp)
نوار &sed $(mktemp /) -o $(خروجی) # عملکرد بر روی خروجی &grep

notdir نام فایل ها
بخش غیر دایرکتوری نام(های) فایل را برمی‌گرداند، یعنی همه چیز را بعد از آخرین
اگر یکی وجود دارد اسلش کنید، یا نام کل فایل را در غیر این صورت اسلش کنید.

only_generated نام فایل ها
فقط نام فایل‌هایی را که توسط makepp و نه از آن زمان ایجاد شده‌اند در لیست برمی‌گرداند
با توجه به فایل اطلاعات ساخت، اصلاح شد.

این تابع در قوانین هدف تمیز مفید است (البته "makeppclean" است
نوع ترجیحی):

$ (تمیز ساختگی):
&rm -f $(only_generated **/*)

only_nontargets نام فایل ها
فقط نام فایل هایی را در لیست برمی گرداند که هدف هیچ قاعده ای نیستند (یا
قوانین صریح یا الگو). شما می توانید یک علامت عام مشخص کنید (به "$(wildcard )" مراجعه کنید.
برای جزئیات بیشتر در مورد حروف وحشی makepp). این می تواند برای تولید a استفاده شود
هدف توزیع، به عنوان مثال:

.PHONY: توزیع

توزیع:
&mkdir our_product-$(VERSION)
&cp $(%~ فیلتر کردن، $(only_nontargets *)) our_product-$(VERSION)
tar cf - our_product-$(VERSION) | gzip -9c > our_product-$(VERSION).tar.gz

در این مورد، "$(only_nontargets *)" هر فایل موجود در فهرست فعلی را برمی گرداند
که هدف برخی از قوانین نیست. "$(filter_out %~, ...)" ویرایشگر را حذف می کند
پشتیبان گیری

مشابه "only_targets" (به بالا مراجعه کنید)، "only_nontargets" فقط در مورد اهدافی می داند که
قبلا تعریف شده است این تنها در صورتی یک مشکل است که از آن برای تعریف متغیرها استفاده کنید
با تکلیف ":="; اگر از آن در لیست وابستگی یا در بدنه a استفاده کنید
قانون، همه قوانین دیگر قبلا دیده شده اند.

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

این تابع برای اطمینان از عدم وابستگی به چنین فایل‌هایی مفید است.
بدون اجبار به ساخت تمیز همه اهداف:

$ (خیط و پیت کردن ساختگی):
&rm -f $(only_stale **/*)

در واقع، احتمالاً بهتر است به جای آن اسکریپتی بنویسید که makepp را برای تولید فراخوانی کند
لیست فایل‌های قدیمی و سپس آن اسکریپت را بخواهید که همه فایل‌های فهرست شده را حذف کند
در حال حاضر تحت کنترل منبع نیستند، فقط در صورتی که یک فایل تولید شده به منبع تبدیل شود
فایل. Makepp چنین عملکردی را ندارد زیرا makepp است (و احتمالاً
باید باقی بماند) نسبت به کنترل منبع غافل.

only_targets نام فایل ها
فقط نام فایل‌هایی را در لیست برمی‌گرداند که در واقع هدف برخی از قوانین هستند
(اعم از قوانین صریح یا الگو). شما می توانید حروف عام (از جمله makepp) را مشخص کنید
علامت عام خاص، "**") در نام فایل ها. (برای اطلاعات بیشتر به تابع "$(wildcard )" مراجعه کنید
جزئیات. این را می توان برای یک هدف تمیز استفاده کرد، به عنوان مثال:

.PHONY: تمیز

تمیز:
&rm -f $(only_targets *)

حالا اگر "makepp clean" را تایپ کنید، هر چیزی را که می داند چگونه بسازد را پاک می کند. ولی
هدف تمیز ایجاد نکنید، به جای آن از "makeppclean" استفاده کنید!

مکان دیگری که ممکن است مفید باشد، اجتناب از بیات شدن است .o فایل های موجود در شما
ساختن. به عنوان مثال، اگر یک کتابخانه مانند این بسازید:

mylib.a: *.o
&rm -f $(خروجی)
$(AR) cr $(خروجی) $(ورودی ها)

و سپس برخی از فایل های منبع را حذف می کنید اما فراموش می کنید که مربوطه را حذف کنید .o فایل ها،
la .o فایل ها همچنان در اطراف خواهند بود. این بدان معنی است که آنها همچنان در آنها گنجانده می شوند
کتابخانه با وجود این واقعیت که آنها دیگر مفید نیستند. اگر خود را اصلاح کنید
حکم به این صورت:

mylib.a: $(only_targets *.o)
&rm -f $(خروجی)
$(AR) cr $(خروجی) $(ورودی ها)

سپس این مشکل رخ نخواهد داد.

توجه داشته باشید که این فقط به فایل هایی اشاره دارد که به عنوان هدف شناخته می شوند at la زمان شما
فراخوانی "فقط اهداف". اگر "only_targets" در وابستگی ها یا اقدامات a ظاهر شود
در این صورت تمام اهداف ممکن شناخته خواهند شد زیرا وابستگی ها و اقدامات مشخص نیستند
ارزیابی می شود تا زمانی که قانون اجرا شود. با این حال، اگر ارزیابی می کنید، سعی کنید آن را ارزیابی کنید
قبلا در makefile با یک متغیر ":=" مانند این:

ALL_TARGETS := $(only_targets *)

هدف 1: وابستگی 1
اقدامات

هدف 2: وابستگی 2
اقدامات

سپس "only_targets" از قوانین بعدی اطلاعی نخواهد داشت.

به طور مشابه، "only_targets" در مورد اهداف تولید شده در فایل های make که هستند اطلاعی ندارد
بارگذاری شده با ساخت بازگشتی (اما به هر حال نباید از make بازگشتی استفاده کنید؛ استفاده کنید
به جای آن از عبارت "load_makefile" یا بارگذاری ضمنی makefile استفاده کنید.)

نسبی_نام فایل file1 file2 file3[, بریده بریده]
نام آن فایل‌ها را به دایرکتوری فعلی برمی‌گرداند (یکی که
makefile در است). همچنین می‌توان از آن برای پاک کردن «./» غیر ضروری و سایر آشغال‌ها استفاده کرد
مسیر:

DIR := .
SUBDIR := ..
FNAME := $(DIR)/../otherdir/$(SUBDIR)/files
X := $(relative_filename $(FNAME))

If چاک درست است (معمولاً 1) نام فایل های برگشتی دارای یک اسلش تضمینی هستند
با اضافه کردن "./" در صورت لزوم، به طوری که شما می توانید آن را به عنوان یک نام اجرایی بدون استفاده کنید
نگرانی در مورد مسیر جستجوی فرمان که مکان دایرکتوری را نادیده می گیرد.

اگر مسیر توسط دایرکتوری ریشه می رود، والد دایرکتوری اصلی شما یا
"$(ROOT)" سیستم ساخت شما، یا در ویندوز ریشه یک درایو (بسته به
محیط زیست، این نیز برای /cygdrive/c or /c) یک مسیر مطلق خواهد بود
به جای آن بازگشت.

نسبت_به file1 file2 file3[, فهرست راهنما]
نام آن فایل ها را به دایرکتوری مشخص شده برمی گرداند. این هست
معمولاً زمانی مفید است که به هر دلیلی مجبور به اجرای دستوری از a هستید
دایرکتوری مختلف (دایرکتوری پیش فرض فعلی):

source_backup.tar:
cd .. && tar cf $(نسبت به $(خروجی)، ..) $(نسبت به .، ..)

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

به عنوان مثال،

$(پسوند src/foo.c src-1.0/bar.c هک)

نتیجه ".c .c" را ایجاد می کند.

موقت کلمات
به makepp اطلاع دهید که ممکن است اهداف مشخص شده توسط قانون ایجاد شده حذف شوند
آنها شبیه به "تقلبی"، با این تفاوت که makepp انتظار دارد که یک فایل واقعی با آن نام باشد
اراده ممکن است تحت تأثیر این قانون قرار گیرد. یک قانون اگر فقط موقت باشد اجرا نمی شود
اهداف قدیمی هستند

wildcard الگو
نام های مرتب شده همه فایل های مطابق با الگوی داده شده موجود یا آن ها را برمی گرداند
فایل هایی که هنوز وجود ندارند اما می توانند بر اساس قوانینی که makepp می داند ساخته شوند
about در نقطه ای که عبارت را ارزیابی می کند. در این نکته آخر فرق می کند
از نویسه‌های عام ورودی قانون، که حتی برای فایل‌هایی که توسط قوانینی که بعداً یافت می‌شوند نیز اعمال می‌شوند.

Makepp از تمام حروف عام پوسته معمولی ("*"، "?"، و "[]") پشتیبانی می کند. همچنین دارای یک
علامت عام "**" که با هر تعداد دایرکتوری مداخله ای مطابقت دارد. (این ایده بود
به سرقت رفته از zsh.) برای مثال، "**/*.c" با همه موارد مطابقت دارد .c فایل ها در کل منبع
درخت "objects/**/*.o" با همه موارد مطابقت دارد .o فایل های موجود در هر نقطه از
زیرشاخه اشیاء یا هر یک از زیر شاخه های آن یا هر یک از زیر شاخه های آنها. در
حروف عام "**" پیوندهای نرم به دایرکتوری ها را در هیچ سطحی دنبال نمی کند و این کار را هم نخواهد کرد
سعی کنید دایرکتوری هایی را وارد کنید که وجود دارند اما قابل خواندن نیستند. همچنین فایل ها و
دایرکتوری هایی که وجود دارند اما قابل خواندن نیستند توسط "$(wildcard )" بازگردانده نمی شوند.

رشته توابع
افزودن پیشوند پیشوند، کلمات
رشته پیشوند را به هر یک از کلمات اضافه می کند. این بیشتر برای ساخت گنو است
سازگاری؛ با استفاده از بسط به سبک rc، می توان این کار را به شیوه ای خواناتر انجام داد
مثل این:

ماژول ها: = abcd
X_OLD_STYLE := $(addprefix $(OBJDIR)/, $(addsuffix .o, $(MODULES)))
X_NEW_STYLE := $(OBJDIR)/$(MODULES).o # آیا خواندن آن آسان تر نیست؟

پسوند اضافه پسوند، کلمات
رشته پسوند را به هر یک از کلمات اضافه می کند. این بیشتر برای ساخت گنو است
سازگاری؛ با استفاده از بسط به سبک rc، می توان این کار را به شیوه ای خواناتر انجام داد
مثل این:

X_OLD_STYLE := $(افزودن پسوند .o، $(MODULES))
X_NEW_STYLE := $(MODULES).o

صدا متغیر[، کلمات]...
تابع "تماس" از این نظر منحصر به فرد است که می توان از آن برای در نظر گرفتن استفاده کرد متغیر به عنوان یک
تابع پارامتری شده می توانید یک عبارت پیچیده را به آن اختصاص دهید متغیر و استفاده کنید
"تماس" برای گسترش محتویات آن به مقادیر مختلف پارامتر شده توسط کلمات بعد ها. که در
سایر سیستم‌های ساخت، متغیری که عمدتاً به منظور گسترش از طریق استفاده می‌شود
"تماس"، a نامیده می شود درشت دستور.

در طول گسترش ماکرو، متغیرهای موقت $1, $2, "..." رجوع به
آرگومان هایی که در هنگام فراخوانی به "تماس" داده می شود. متغیر $0 گسترش خواهد یافت
نام ماکرو (یعنی متغیر) که "تماس" در حال حاضر در حال گسترش است.

هیچ محدودیتی وجود ندارد که یک ماکرو با چند آرگومان فراخوانی شود یا چند
پارامترهایی که یک ماکرو ممکن است انتظار داشته باشد. اگر آرگومان‌های بیشتری را برای «تماس» به عنوان ماکرو ارسال کنید
نیاز است، همه آرگومان های بیش از حد نادیده گرفته می شوند. اگر آرگومان های کمتری از الف پاس کنید
انتظار ماکرو، تمام پارامترهای بیش از حد در رشته خالی جمع می شوند.

ابتدا یک مثال ساده:

استراحت = $(کلمات 2، $(کلمات $(1))، $(1))
لیست = ABCDE
butfirst := $(تماس استراحت،$(لیست))

در اینجا، متغیر "$(butfirst)" حاوی لیست "BCDE" خواهد بود.

و اکنون برای مثال پیچیده تر برای نشان دادن آنچه ممکن است:

استراحت = $(لیست کلمات 2، $(کلمات $(1))، ${1})
mymap = $(اگر $2,$(با $1,$(کلمه اول $2 تماس بگیرید)) $(تماس $0,$1,$(تماس استراحت,$2)))
downcase = ${makeperl lc("$1")}

UCWORDS = همه این کلمات حریف هستند
DCWORDS := $(تماس با mymap,downcase,$(UCWORDS))

اکنون "$(DCWORDS)" حاوی "همه این کلمات حروف بزرگ هستند". ضمناً: این باعث نمی شود
تفاوت، اینکه آیا ما از طریق به آرگومان ها دسترسی داریم $1, "${1}" or "$(1)" در یک ماکرو

می‌توانید مستقیماً از متغیر مانند یک تابع استفاده کنید، اگر وجود ندارد
عملکرد آن نام این به صورت داخلی به "تماس" تبدیل می شود، بنابراین اینها هستند
معادل:

بحث = $0 به $1 $2 تبدیل شد.
مستقیم = $(بحث و استدلال)
فراخوانی = $(تماس بحث، یک، استدلال)

ممکن است بحث برانگیز به نظر برسد که "$[call]" باید "$[]" ماکرو را نیز گسترش دهد.
عبارات، یا اینکه آیا یک تابع باید همیشه یک کار را انجام دهد، مهم نیست چگونه باشد
نامیده میشود. دومی انتخاب شد، زیرا با دستور ساخت معمولی اینطور خواهد بود
دریافت "$[1]، $[2]..." در یک متغیر غیرممکن است (آنها با هیچ چیز جایگزین نمی شوند،
حتی قبل از اینکه تخصیص انجام شود.) بنابراین، اگر یک ماکرو برای تعریف a دارید
قانون، شما می خواهید عباراتی مانند "$(output)" زمانی که قانون تجزیه می شود دیده شود، بنابراین
شما باید آنها را از "تماس" محافظت کنید:

myrule را تعریف کنید
2 دلار: 1 دلار
mycommand $$(ورودی) -o $$(خروجی)
endf
$[myrule myinput,myoutput]

فیلتر الگوها ، کلمات
همه کلمات موجود در لیست را که با الگوها مطابقت دارند برمی‌گرداند. الگوها ممکن است به سادگی دیگری باشند
کلمات، یا حروف عام نام فایل (به عنوان مثال، "*"، "?"، و "[az]" شناسایی می شوند)، یا ممکن است
دارای یک کاراکتر "%" است که به معنای مطابقت با هر رشته ای در آن نقطه است (همانند "*").

فیلتر کردن الگوها ، کلمات
همه کلمات موجود در لیست را که با الگوها مطابقت ندارند برمی‌گرداند. الگوها ممکن است به سادگی باشند
کلمات دیگر، یا حروف عام نام فایل (به عنوان مثال، "*"، "?"، و "[az]" شناسایی می شوند)، یا
آنها ممکن است یک کاراکتر "%" داشته باشند، به این معنی که با هر رشته ای در آن نقطه مطابقت دارند (همانند
"*").

مثلا:

libproduction.a: $(filter_out test_*, $(wildcard *.o))

همه را قرار خواهد داد .o فایل هایی که وجود دارند یا می توانند ساخته شوند، به جز آنهایی که با آنها شروع می شود آزمون_,
به libproduction.a.

رشته یافتن پیدا کردن، in
برگشت پیدا کردن، اگر زیر رشته ای از in.

کلمه ی اول کلمات
اولین کلمه را برگردانید.

نقشه کلمات ، پرل کد
نقشه کلمات ، پرل کد
به طور مشابه برای نقشه پرل، اعمال می شود پرل کد به هر کلمه به نوبه خود و برمی گرداند
نتایج. نوع اول کد پرل ساده است، در حالی که نوع دوم ابتدا عبور می کند
perlcode از طریق بسط متغیر Make-style. کلمات در هر دو بسط یافته است
موارد.

کلمات در $_ هستند و بازگردانده می شوند، مگر اینکه شما $_ را unef کنید. این در نظر گرفته شده است
تغییراتی که به راحتی توسط "patsubst" قابل کنترل نیستند. فقط کاما اول جداکننده است،
هر دیگری بخشی از آن محسوب می شود پرل کد.

# کلمات را تغییر دهید. دو پرانتز، برای اجازه دادن پرانتز در perlcode، یا از ${} استفاده کنید:
X = $((نقشه $(VALUES)، s/(.+)-(.+)/$2-$1/))
# می توانید از عبارت make استفاده کنید، اما پس از آن باید از $$ برای Perl $ استفاده کنید:
Y = $(mapmap $(VALUES)، tr/$(OLDCHARS)/$(NEWCHARS)/ یا $$_ = 'شکست خورد')
# می توانید نامزدها را حذف کنید:
Y = $(نقشه $(VALUES)، unef $_ اگر /no_good/)

پیوستن کلمات 1، کلمات 2
کلمات اول و کلمه دوم را دو به دو به هم متصل کنید.

patsubst الگو، جایگزین، کلمات
یک جایگزین برای هر کلمه در لیست کلمات انجام می دهد. یک کاراکتر "%" با هر کدام مطابقت دارد
رشته این به بهترین شکل با یک مثال نشان داده می شود:

OBJS = $(patsubst %.c، object_dir/%.o، $(C_SOURCES))

هر فایل موجود در C_SOURCES را می گیرد و نام یک فایل شی را در object_dir برمی گرداند.
گاهی اوقات استفاده از یک مرجع جایگزین مختصرتر است، به عنوان مثال، موارد فوق می توانند
به عنوان نوشته شده اند

OBJS = $(C_SOURCES:%.c=object_dir/%.o)

نوع word1 word2 word3 ...
کلمات را به ترتیب واژگانی مرتب می کند و تکراری ها را حذف می کند.

نوار رشته
فضای سفید پیشرو و انتهایی را از رشته حذف می کند و هر داخلی را جایگزین می کند
دنباله ای از یک یا چند کاراکتر فضای خالی با یک فاصله. بنابراین، "$(strip ab
ج )" به "abc" می رسد.

جایگزین از، به، متن
یک جایگزین متنی روی متن متن انجام می دهد: هر رخداد از جایگزین می شود
توسط به. نتیجه جایگزین فراخوانی تابع می شود. مثلا،

$(subst ee, EE, foot on the street)

رشته "fEEt on the strEEt" را جایگزین می کند.

کلمه n، متن
برمی گرداند nکلمه ام متن. ارزش های مشروع از n از ابتدا از 1 شروع کنید
یا به عقب از -1 در پایان. اگر n از تعداد کلمات موجود بیشتر است متناز
مقدار خالی است

فهرست لغت فهرست فهرست، کلمات
فهرست لغت اولین شاخص، آخرین فهرست، کلمات
در فرم اول شما فهرستی از شاخص ها را ارائه می دهید (از 1 در ابتدا یا
به عقب از -1 در پایان) برای انتخاب کلمات مورد نظر. در شکل دوم شما
محدوده کلماتی را که می خواهید برگردانید را مشخص کنید.

کلمات متن
تعداد کلمات موجود را برمی‌گرداند متن.

متفرقه توابع
برای هر var، لیست، متن
دو استدلال اول، VAR و فهرست، قبل از انجام هر کار دیگری گسترش می یابند. توجه داشته باشید
که آخرین آرگومان، متن، در همان زمان بسط نمی‌یابد. سپس برای هر کلمه از
مقدار بسط یافته لیست، متغیری که با مقدار منبسط شده var نامگذاری شده روی تنظیم شده است
آن کلمه، و متن گسترش یافته است. احتمالاً متن حاوی ارجاعاتی به آن متغیر است،
بنابراین گسترش آن هر بار متفاوت خواهد بود.

این مثال ساده متغیر را تنظیم می کند فایل ها به لیست تمام فایل های موجود در
دایرکتوری های موجود در لیست دیر:

dirs := abcd
فایل‌ها:= $(foreach dir,$(dirs)،$(wildcard $(dir)/*))

در اینجا متن "$(عام $(dir)/*)" است. اولین تکرار مقدار "a" را برای dir پیدا می کند.
بنابراین همان نتیجه را ایجاد می کند که "$(wildcard a/*)"; تکرار دوم تولید می کند
نتیجه "$(wildcard b/*)"؛ و سومی، "$(wildcard c/*)".

این مثال همان نتیجه را دارد (به جز تنظیم "dirs") مانند مثال زیر:

فایل‌ها:= $(کارت عام a/* b/* c/* d/*)

وقتی متن پیچیده است، می‌توانید با یک نام، خوانایی آن را بهبود ببخشید
متغیر اضافی:

find_files = $(عام $(dir)/*)
dirs := abcd
فایل‌ها:= $(foreach dir،$(dirs)،$(find_files))

در اینجا از متغیر find_files به این صورت استفاده می کنیم. برای تعریف a از "=" ساده استفاده می کنیم
متغیر با گسترش بازگشتی، به طوری که مقدار آن حاوی یک فراخوانی تابع واقعی باشد
تحت کنترل foreach مجدداً گسترش یابد. یک متغیر به سادگی بسط داده نمی شود،
زیرا در زمان تعریف find_files، wildcard فقط یک بار فراخوانی می شود.

توجه: این را با متغیر ویژه "$(foreach)" اشتباه نگیرید.

اطلاعات متن
هشدار متن
خطا متن
خروجی متن چیزی را برمی گرداند. اولی به STDOUT می رود، دومی به STDERR،
سوم علاوه بر این پردازش را متوقف می کند.

پیش ساخت اهداف
ساخت اهداف
آرگومان خود را کلمه به کلمه برمی گرداند، اما ابتدا تمام فایل های فهرست شده را می سازد. این مفید است
هنگامی که یک فایل معین هنگام ارزیابی یک عبارت make مورد نیاز است. این معمولا اتفاق می افتد
هنگامی که یک بیلد دارید که در آن مجموعه فایل های درگیر توسط پوسته ای محاسبه می شود
دستورات مثلا،

file_list :
# دستورات پوسته برای محاسبه لیستی از فایل ها برای قرار دادن در برنامه

my_program : $(&cat $(پیش ساخت file_list))

اگر به لیست در بیش از یک قانون نیاز دارید، استفاده از یک کارآمدتر خواهد بود
متغیر را حداکثر یک بار گسترش دهید:

file_list ;= $(&cat $(پیش ساخت file_list))

my_program1: ao $(file_list)

my_program2 : bo $(file_list)

اگر به جای آن فقط «$(&cat file_list)» را مشخص کرده باشید، makepp مجبور نخواهد شد
file_list تا قبل از اجرای دستور shell به روز باشد. استفاده از "$(prebuild )"
بهترین راه برای حل این مشکل است. ممکن است وسوسه شوید چیزهای دیگری را امتحان کنید، مانند
این:

my_program : file_list $(&cat file_list)

اما این کار نمی کند زیرا "$(&cat file_list)" قبل از تلاش makepp ارزیابی می شود
"file_list" را بسازید.

only_phony_targets نام
فقط نام‌هایی را در فهرست برمی‌گرداند که اهداف ساختگی برخی از قوانین هستند (یا
قوانین صریح یا الگو). شما می توانید حروف عام (از جمله خاص makepp) را مشخص کنید
علامت عام، "**") در نام فایل ها. (برای جزئیات بیشتر به تابع "$(wildcard )" مراجعه کنید.
این را می توان برای گروه بندی اهداف استفاده کرد، به عنوان مثال:

$(تست های ساختگی): $(only_phony_targets */**/tests)

منشاء متغیر
با توجه به نام یک متغیر، به شما می گوید که مقدار آن از کجا آمده است.

پرل پرل کد
makeperl پرل کد
perlcode را در یک بلوک ارزیابی می کند و نتیجه را برمی گرداند. اولین نوع پرل ساده است
کد، در حالی که نوع دوم ابتدا perlcode را از طریق متغیر Make-style عبور می دهد
به گسترش است.

توجه داشته باشید که مانند همه توابع، جداکننده تابع استفاده شده ممکن است در داخل ظاهر نشود
perlcode خارج از رشته های تک یا دو نقل قول. اما شما می توانید آن را دو برابر کنید
آخرین مثال:

VAR = 1
VAR1 = ${perl ($VAR + 1) * 3}
VAR2 = $(پرل انجام دهید {$VAR *= 3؛ اگر $VAR $VAR + 1 } را برگردانید)
VAR3 = $(makeperl $(VAR1) * 3 + $$VAR) # یک Make var و یک Perl var
VAR = $((perl if( ... ) { ... }))

جعلی کلمات
نشان می دهد که لیست کلمات در واقع اهداف ساختگی هستند و لیستی را برمی گرداند
اهداف در نظر گرفته شده است که به صورت زیر استفاده شود:

$ (همه جعلی): my_program

$ (تمیز ساختگی):
&rm -f *.o my_program

همچنین می‌توانید یک یا چند هدف را با خطی شبیه به این در هر کجا که هستید، ساختگی اعلام کنید
پرونده شما:

.PHONY: همه تمیز

چاپ متن
متن را خروجی می دهد و آن را برمی گرداند. این بیشتر برای اشکال زدایی مفید است، در حالی که شما این کار را نمی کنید
درک کنید که چرا جایگزینی متغیر نتیجه ای را به همراه دارد. مثلا،

XYZ := $(چاپ $(patsubst %.c، %o، $(SOURCE_FILES)))

نتیجه تماس "patsubst" را چاپ خواهد کرد.

XYZ := $(patsubst %.c، %o، $(چاپ $(SOURCE_FILES)))

آخرین آرگومان فراخوانی "patsubst" را چاپ خواهد کرد.

صدف پوسته فرمان
خروجی فرمان پوسته داده شده را با خطوط جدید با فاصله جایگزین می کند.

توجه داشته باشید که مانند همه توابع، جداکننده تابع استفاده شده ممکن است در داخل ظاهر نشود
فرمان پوسته خارج از رشته های نقل قول شده یک یا دو. اما شما می توانید آن را دو برابر کنید
مانند مثال دوم:

تاریخ = $(تاریخ پوسته) # بهتر: $(زمان محلی اسکالار پرل)
VAR = ${{شل f() { echo hello; }; f}}

سارقین فرمان، آرگومان ها[، پسوند[، طول]]
فهرستی از دستورات جدا شده با خط جدید را برمی‌گرداند که هر کدام با دستور مشخص شده شروع می‌شوند
دستور دهید، و با هر چه بیشتر عناصر لیست بدون مرور کردن پایان دهید
طول (پیش‌فرض 1000) کاراکتر.

هدف از این کار جلوگیری از سرریز کردن محدودیت طول فرمان در سیستم شما است.
به عنوان مثال، اگر تعداد زیادی فایل تولید شده وجود دارد، احتمالاً شما می خواهید فایل های خود را داشته باشید
هدف تمیز (که نباید داشته باشید، زیرا "makeppclean" کارآمدتر است) به
چیزی شبیه به این نگاه کنید:

$ (تمیز ساختگی):
$(xargs $(RM)، $(only_targets **/*))

این همچنین دارای یک اثر جانبی است که در صورت لیست، هیچ فرمانی تولید نمی شود
اتفاقا خالی است اما در این مورد بهتر است از &rm داخلی استفاده کنید،
زیرا آرگومان های دستورات داخلی فقط با حافظه پرل محدود می شوند:

$ (تمیز ساختگی):
&rm -f $(only_targets **/*)

اگر آرگومان سوم مشخص شده باشد، از آن برای پسوند هر فرمان استفاده می شود. این هست
برای تعیین redirectorها مفید است، به عنوان مثال (اگرچه اینجا دوباره &echo کمک می کند):

آشکار:
&rm -f $@
$@ را لمس کنید
$(xargs echo، $(only_nontargets **/*)، >> $@)

برخی از این اسناد بر اساس مستندات ساخت گنو است.

لطفاً توجه داشته باشید که اگر یک تابع در حین تنظیم اولیه پرونده فراخوانی شود، به عنوان مثال:
گسترش متغیرهای صادراتی، پیام های خطا یا هشدار، خط شماره 0 را گزارش می کند.

با استفاده از خدمات onworks.net از makepp_functions به صورت آنلاین استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

دستورات لینوکس

Ad