Richard WM Jones ၊ စာရေးဆရာ
ပန်းတိုင် အရင်းအမြစ်ကုဒ်
- မှီခိုမှုဖြေရှင်းနည်းဗျူဟာတစ်ခုတည်းအတွက် ပံ့ပိုးမှု - "ပစ်မှတ်ဖိုင်ပျောက်ဆုံးနေပါက သို့မဟုတ် မှီခိုမှုတစ်ခုထက် ပိုကြီးပါက စုဝေးမှုလမ်းညွှန်ကို လုပ်ဆောင်ပါသည်။" ရည်မှန်းချက်များသည် URL တစ်ခုရှိမရှိစစ်ဆေးခြင်း၊ မည်သည့်ဖိုင်နှင့်မဆို ပြုပြင်မွမ်းမံချိန်များကို နှိုင်းယှဉ်ခြင်း၊ ပက်ကေ့ချ်အတွင်းထည့်သွင်းခြင်းတို့ကို အကဲဖြတ်ခြင်းကဲ့သို့သော အခြားနည်းဗျူဟာများကို အကောင်အထည်ဖော်ရန် စီစဉ်ထားပါသည်။
kōji စစ်ဆေးမှုများ နှိုင်းယှဉ်ခြင်း၊ ရွေးချယ်ထားသော စစ်ဆေးမှုများကို ကျော်သွားခြင်းဖြင့် စမ်းသပ်လုပ်ဆောင်နေသည့် ကိစ္စများ။ - တည်ဆောက်မှုပစ်မှတ်များကို လုပ်ဆောင်သည့်အခါ၊ make သည် ဖိုင်များနှင့် စည်းမျဥ်းအမည်များကို ခွဲခြားမထားဘဲ၊ ရလဒ်အနေဖြင့်၊ စည်းမျဉ်းတစ်ခုအား လုပ်ဆောင်သည့်အခါ၊ ဖန်တီးသည်ဟုဆိုထားသော ဖိုင်ကို အမှန်တကယ် ဖန်တီးလိမ့်မည်မဟုတ်ကြောင်း စစ်ဆေးခြင်းမရှိပါ။ ဥပမာအားဖြင့်၊ သင့်တွင် scripts များကို စမ်းသပ်မှုများ လုပ်ဆောင်သည့် "test" ဟုခေါ်သော စည်းမျဉ်းတစ်ခု ရှိပါက "test" ဟု အမည်ပေးထားသော ဖိုင်ကို မတော်တဆ ဖန်တီးထားသည်၊ ထို့နောက် tests များကို ခေါ်တော့မည် မဟုတ်ပါ။ မည်သည့်လုပ်ဆောင်ချက်မဆို (ပြဿနာကိုဖန်တီးရန်အတွက်၊ သင်သည် “.PHONY: စမ်းသပ်မှု” ညွှန်ကြားချက်ကို သတ်မှတ်နိုင်သည်)။ ပန်းတိုင်များသည် ဖိုင်များနှင့် စည်းကမ်းအမည်များကို ပြတ်သားစွာ ခွဲခြားထားသည်။
- တပ်ဆင်ခြင်းဆိုင်ရာ ညွှန်ကြားချက်များအတွက် ကန့်သတ်ချက်တစ်ခုသာ ပေးဆောင်ရာတွင် ပြဿနာရှိသည်။
ပန်းတိုင်များသည် သင့်အား အမည်ပေးထားသော ကန့်သတ်ချက်များ အများအပြားကို အသုံးပြုရန် ခွင့်ပြုသည်။ ဥပမာအားဖြင့်၊ သင်သည် အမည်မှ အမှားရှာပြင်ဖိုင်တစ်ခု၏ နိမိတ်လက္ခဏာကို သီးခြားခွဲထုတ်နိုင်သည်-
- shell စကားပြန်နှင့် ဆက်ဆံရာတွင် ပြဿနာများ။ ဥပမာအားဖြင့်၊ ဖိုင်နှင့်လမ်းညွှန်အမည်များတွင် နေရာလွတ်များထွက်ပြေးခြင်းကို ထိန်းချုပ်ရန် လိုအပ်ခြင်း၊ command တစ်ခုစီကိုလုပ်ဆောင်သည့်အခါ သီးခြား shell interpreter ကိုဖွင့်ခြင်းအတွက် အရင်းအမြစ်များ ဖြုန်းတီးခြင်း၊ “$” အက္ခရာ၏ နှစ်ဆအဓိပ္ပာယ်ဖွင့်ဆိုချက် (shell နှင့် make နှစ်မျိုးလုံးတွင်သုံးသည်)၊ indentations များကိုထည့်သွင်းစဉ်းစားသည်။
ခွဲခြမ်းစိပ်ဖြာမှုတစ်ခုအသုံးပြု၍ စုစည်းမှုကိန်းရှင်များအတွက် "$" အစား "%" သင်္ကေတကို အသုံးပြုခြင်းဖြင့် ဤပြဿနာများကို ပန်းတိုင်များတွင် ဖြေရှင်းနိုင်သည် ("$"
LALR(1) လမ်းကြောင်းများနှင့် ဖိုင်အမည်များကို ကိုးကားချက်များဖြင့် ဝန်းရံထားပြီး ကုဒ်တုံးများကို အကောက်အကောက်များဖြင့် အသားပေးဖော်ပြရန် လိုအပ်ပါသည်။ command block တစ်ခုလုံးကို command shell ၏ စံနမူနာတစ်ခုတွင် စတင်ထားပြီး၊ block အတွင်းတွင် အထူးနေရာများကို ရည်ညွှန်းခြင်းမရှိဘဲ မတရားကုဒ်ဖော်မတ်ပြုလုပ်ခြင်းကို ခွင့်ပြုထားသည်။ဖြစ်ခဲ့သည်-
ပစ်မှတ်- foo.o bar.o
${CC} ${CFLAGS} $< -o $@ဖြစ်လာသည်-
"ပစ်မှတ်": "foo.o", "bar.o" {
%CC %CFLAGS %< -o %@
}
Goals ၏ အခြားအင်္ဂါရပ်များ
- မတရားသော အမည်များနှင့် ကန့်သတ်ချက်များ သတ်မှတ်ခြင်းအတွက် ရွေးချယ်နိုင်သော ပံ့ပိုးမှု-
ပန်းတိုင် = : "ပစ်မှတ်"
ဂိုးလင့် =
"ပစ်မှတ်" : "foo.o", "bar.o" { ... }ပန်းတိုင် compile (အမည်) =
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - စတင်ခြင်းမုဒ်နှစ်ခု- ဖိုင်အမည်များဖြင့် တည်ဆောက်ထားသော ပစ်မှတ်များကို ကိုက်ညီစေရန် မုဒ်လုပ်ပါ (ဥပမာ၊ ဖိုင် "foo.o" သည် ပစ်မှတ် "%name.o" နှင့် ကိုက်ညီသည်) နှင့် တိုက်ရိုက်စုစည်းမှုမုဒ်-
ပန်းတိုင်အားလုံး = : လင့်ခ်
ဂိုးလင့် =
"target" : "foo.o", compile ("bar") { ... }ပန်းတိုင် compile (အမည်) =
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - စည်းဝေးပွဲဆိုင်ရာ နည်းဗျူဟာများကို စည်းဝေးပွဲပစ်မှတ်ကို ပြန်လည်စုစည်းရန် လိုအပ်ကြောင်း ဆုံးဖြတ်ရန် အသုံးပြုနိုင်သည့် အထူးစည်းမျဉ်းများဖြင့် ဆုံးဖြတ်သည်။ ဖိုင်တစ်ခု၏ရှေ့မှောက်တွင် လင့်ခ်တစ်ခုကို ပြုလုပ်ထားပါက ၎င်းကို သက်ဆိုင်ရာ သင်္ကေတ (စည်းမျဉ်းအမည်အတွက် "ပစ်မှတ်" နှင့် ဖိုင်ကိုစစ်ဆေးရန်အတွက် * ဖိုင် ("ပစ်မှတ်")) ကို သက်ဆိုင်ရာ သင်္ကေတဖြင့် အတိအလင်း ဆုံးဖြတ်သည်။
"ပစ်မှတ်" : "foo.o", "bar.o" { ... }
*file("ပစ်မှတ်"): *file("foo.o"), *file("bar.o") { ... }
- ပြုစုသူသည် စည်းဝေးမှုနည်းဗျူဟာများ၏ မတရားသော အရည်အချင်းများကို သတ်မှတ်နိုင်သည်။ "*file" အလံကို ပုံသေအားဖြင့် သတ်မှတ်ထားသည် (@{...} သည် output ကို နှိမ်နှင်းခြင်းကို ညွှန်ပြပြီး "exit 99" သည် ပြန်လည်တည်ဆောက်ရန် လိုအပ်ကြောင်း အချက်ပြသည်-
နည်းဗျူဟာ *file (ဖိုင်အမည်) = @{
စမ်းသပ်မှု -f %filename || ထွက်ပေါက် ၉၉
f အတွက် %source: opennet.ru