Ito ang command pmake na maaaring patakbuhin sa OnWorks free hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator
PROGRAMA:
NAME
bmake — panatilihin ang mga dependencies sa programa
SINOPSIS
bmake [-BeikNnqrstWwX] [-C direktoryo] [-D nagbabago] [-d flag] [-f makefile] [-I direktoryo]
[-J pribado] [-j max_jobs] [-m direktoryo] [-T file] [-V nagbabago] [variable=halaga]
[target ...]
DESCRIPTION
bmake ay isang programa na idinisenyo upang pasimplehin ang pagpapanatili ng iba pang mga programa. Ang input nito ay a
listahan ng mga detalye tungkol sa mga file kung saan nakasalalay ang mga program at iba pang mga file. Kung hindi -f
makefile Ang pagpipiliang makefile ay ibinigay, bmake susubukan kong buksan 'makefile'tapos'Makefile' sa
upang mahanap ang mga pagtutukoy. Kung ang file '.depende' umiiral, ito ay binabasa (tingnan mkdep(1)).
Ang manu-manong pahinang ito ay inilaan bilang isang reference na dokumento lamang. Para sa mas masusing paglalarawan
of bmake at makefiles, mangyaring sumangguni sa PMake - A Sangguni.
bmake ay ihahanda ang mga nilalaman ng MAKEFLAGS environment variable sa command line
mga argumento bago i-parse ang mga ito.
Ang mga pagpipilian ay ang mga sumusunod:
-B Subukang maging backward compatible sa pamamagitan ng pag-execute ng isang shell sa bawat command at by
pagpapatupad ng mga utos upang gawin ang mga mapagkukunan ng isang linya ng dependency sa pagkakasunud-sunod.
-C direktoryo
Palitan sa direktoryo bago basahin ang makefiles o gumawa ng anumang bagay. Kung
maramihang -C ang mga opsyon ay tinukoy, ang bawat isa ay binibigyang-kahulugan na may kaugnayan sa nauna:
-C / -C at iba pa ay katumbas ng -C / atbp.
-D nagbabago
Tukuyin nagbabago upang maging 1, sa pandaigdigang konteksto.
-d [-] mga watawat
I-on ang pag-debug, at tukuyin kung aling mga bahagi ng bmake ay mag-print ng debugging
impormasyon. Maliban kung ang mga watawat ay pinangungunahan ng '-' ang mga ito ay idinagdag sa MAKEFLAGS
environment variable at ipoproseso ng sinumang bata na gumawa ng mga proseso. Bilang default,
Ang impormasyon sa pag-debug ay naka-print sa karaniwang error, ngunit maaari itong baguhin gamit
ang F pag-debug ng bandila. Ang pag-debug na output ay palaging hindi naka-buffer; bilang karagdagan, kung
Pinagana ang pag-debug ngunit ang output ng pag-debug ay hindi nakadirekta sa karaniwang output, kung gayon
ang karaniwang output ay line buffered. Flag ay isa o higit pa sa mga sumusunod:
A I-print ang lahat ng posibleng impormasyon sa pag-debug; katumbas ng pagtukoy sa lahat ng
ang mga flag ng debugging.
a Mag-print ng impormasyon sa pag-debug tungkol sa paghahanap at pag-cache ng archive.
C Mag-print ng impormasyon sa pag-debug tungkol sa kasalukuyang gumaganang direktoryo.
c Mag-print ng impormasyon sa pag-debug tungkol sa conditional na pagsusuri.
d Mag-print ng impormasyon sa pag-debug tungkol sa paghahanap at pag-cache ng direktoryo.
e Mag-print ng impormasyon sa pag-debug tungkol sa mga nabigong command at target.
F[+]filename
Tukuyin kung saan nakasulat ang output ng pag-debug. Ito ay dapat na ang huling bandila,
dahil inuubos nito ang natitirang argumento. Kung ang karakter
kaagad pagkatapos ng flag na 'F' ay '+', pagkatapos ay bubuksan ang file
idagdag ang mode; kung hindi, ang file ay mapapatungan. Kung ang pangalan ng file ay
'stdout' o 'stderr' pagkatapos ang pag-debug ng output ay isusulat sa pamantayan
output o standard error output file descriptors ayon sa pagkakabanggit (at ang '+'
walang epekto ang opsyon). Kung hindi, ang output ay isusulat sa pinangalanan
file. Kung ang pangalan ng file ay nagtatapos sa '.%d' kung gayon ang '%d' ay papalitan ng pid.
f Mag-print ng impormasyon sa pag-debug tungkol sa pagsusuri ng loop.
g1 I-print ang input graph bago gumawa ng anuman.
g2 I-print ang input graph pagkatapos gawin ang lahat, o bago lumabas nang may error.
g3 I-print ang input graph bago lumabas sa error.
j Mag-print ng impormasyon sa pag-debug tungkol sa pagpapatakbo ng maraming shell.
l Mag-print ng mga command sa Makefiles kahit na prefix ang mga ito o hindi
sa pamamagitan ng '@' o iba pang "tahimik" na mga flag. Kilala rin bilang "malakas" na pag-uugali.
M Mag-print ng impormasyon sa pag-debug tungkol sa mga desisyon sa "meta" mode tungkol sa mga target.
m Mag-print ng impormasyon sa pag-debug tungkol sa paggawa ng mga target, kabilang ang pagbabago
petsa.
n Huwag tanggalin ang pansamantalang command script na ginawa kapag nagpapatakbo ng mga command.
Ang mga pansamantalang script na ito ay nilikha sa direktoryo na tinutukoy ng
variable ng kapaligiran ng TMPDIR, o sa / Tmp kung ang TMPDIR ay hindi nakatakda o nakatakda sa
walang laman na string. Ang mga pansamantalang script ay nilikha ni mkstemp(3), at mayroon
mga pangalan ng form gumawaXXXXXX. NOTA: Maaari itong lumikha ng maraming file sa TMPDIR o
/ Tmp, kaya gamitin nang may pag-iingat.
p Mag-print ng impormasyon sa pag-debug tungkol sa pag-parse ng makefile.
s Mag-print ng impormasyon sa pag-debug tungkol sa mga panuntunan sa pagbabago ng suffix.
t I-print ang impormasyon sa pag-debug tungkol sa pagpapanatili ng listahan ng target.
V Pilitin ang -V opsyon upang mag-print ng mga hilaw na halaga ng mga variable.
v Mag-print ng impormasyon sa pag-debug tungkol sa variable na pagtatalaga.
x Patakbuhin ang mga utos ng shell gamit ang -x kaya ang aktwal na mga utos ay naka-print bilang sila ay
pinatay.
-e Tukuyin na ang mga variable ng kapaligiran ay nag-o-override sa mga macro assignment sa loob ng makefiles.
-f makefile
Tumukoy ng makefile na babasahin sa halip na ang default na 'makefile'. Kung makefile ay '-',
nabasa ang karaniwang input. Maaaring tukuyin ang maraming makefile, at binabasa sa
tinukoy ang order.
-I direktoryo
Tukuyin ang isang direktoryo kung saan maghahanap ng mga makefile at kasama ang mga makefile. Ang
system makefile directory (o mga direktoryo, tingnan ang -m opsyon) ay awtomatikong
kasama bilang bahagi ng listahang ito.
-i Huwag pansinin ang non-zero exit ng mga shell command sa makefile. Katumbas ng pagtukoy
'-' bago ang bawat command line sa makefile.
-J pribado
Ang pagpipiliang ito ay dapat hindi matukoy ng gumagamit.
Kapag ang j ang opsyon ay ginagamit sa isang recursive build, ang opsyong ito ay ipinapasa ng isang make to
ginagawa ng bata upang payagan ang lahat ng proseso ng paggawa sa build na magtulungan upang maiwasan
overloading ang system.
-j max_jobs
Tukuyin ang maximum na bilang ng mga trabaho na iyon bmake maaaring tumakbo sa anumang oras. Ang
ang halaga ay naka-save sa .GUMAWA. MGA TRABAHO. Ino-off ang compatibility mode, maliban kung ang B bandila ay
tinukoy din. Kapag naka-off ang compatibility mode, lahat ng command na nauugnay sa a
Ang target ay isinasagawa sa iisang shell invocation kumpara sa tradisyonal
shell invocation bawat linya. Maaari nitong sirain ang mga tradisyonal na script na nagbabago
mga direktoryo sa bawat invocation ng command at pagkatapos ay asahan na magsimula sa bago
kapaligiran sa susunod na linya. Mas mahusay na itama ang mga script sa halip
kaysa i-on pabalik ang compatibility.
-k Ipagpatuloy ang pagpoproseso pagkatapos na magkaroon ng mga error, ngunit sa mga target na iyon lang
hindi nakasalalay sa target kung saan ang paglikha ay nagdulot ng error.
-m direktoryo
Tukuyin ang isang direktoryo kung saan hahanapin ang sys.mk at mga makefile na kasama sa pamamagitan ng
⟨file⟩-style isama ang pahayag. Ang -m ang opsyon ay maaaring gamitin ng maraming beses upang bumuo ng a
landas ng paghahanap. I-override ng path na ito ang default na system kasama ang path:
/usr/share/mk. Higit pa rito, ang path na kasama ng system ay idaragdag sa paghahanap
landas na ginamit para sa "file"-style isama ang mga pahayag (tingnan ang -I pagpipilian).
Kung ang isang file o pangalan ng direktoryo sa -m argumento (o ang MAKESYSPATH environment
variable) ay nagsisimula sa string na ".../" pagkatapos bmake hahanapin ang tinukoy
file o direktoryo na pinangalanan sa natitirang bahagi ng string ng argumento. Ang paghahanap
nagsisimula sa kasalukuyang direktoryo ng Makefile at pagkatapos ay gumagana pataas patungo sa
ugat ng filesystem. Kung matagumpay ang paghahanap, pagkatapos ay ang resultang direktoryo
pinapalitan ang ".../" na detalye sa -m argumento. Kung ginamit, pinapayagan ng tampok na ito
bmake upang madaling maghanap sa kasalukuyang source tree para sa mga na-customize na sys.mk file (hal,
sa pamamagitan ng paggamit ng ".../mk/sys.mk" bilang argumento).
-n Ipakita ang mga utos na ipapatupad sana, ngunit hindi aktwal na isagawa ang mga ito
maliban kung ang target ay nakasalalay sa .MAKE espesyal na mapagkukunan (tingnan sa ibaba).
-N Ipakita ang mga utos na maisakatuparan sana, ngunit huwag talagang magsagawa ng anuman
sa kanila; kapaki-pakinabang para sa pag-debug ng mga top-level na makefile nang hindi bumababa sa
mga subdirectory.
-q Huwag magsagawa ng anumang mga utos, ngunit lumabas sa 0 kung ang mga tinukoy na target ay napapanahon at
1, kung hindi.
-r Huwag gamitin ang mga built-in na panuntunan na tinukoy sa makefile ng system.
-s Huwag i-echo ang anumang mga utos habang isinasagawa ang mga ito. Katumbas ng pagtukoy sa '@' kanina
bawat command line sa makefile.
-T tracefile
Kapag ginamit kasama ng -j bandila, magdagdag ng isang trace record sa tracefile para sa bawat trabahong sinimulan
at natapos.
-t Sa halip na muling buuin ang isang target tulad ng tinukoy sa makefile, gawin ito o i-update
oras ng pagbabago nito upang gawin itong napapanahon.
-V nagbabago
Print bmakeideya ng halaga ng nagbabago, sa pandaigdigang konteksto. Huwag magtayo
anumang mga target. Maaaring tukuyin ang maraming pagkakataon ng opsyong ito; ang mga variable ay
ipi-print ng isa sa bawat linya, na may blangkong linya para sa bawat null o hindi natukoy na variable. Kung
nagbabago naglalaman ng '$' pagkatapos ay lalawak ang halaga bago i-print.
-W Tratuhin ang anumang mga babala sa panahon ng pag-parse ng makefile bilang mga error.
-w I-print ang pagpasok at pag-alis ng mga mensahe sa direktoryo, pre at post processing.
-X Huwag i-export ang mga variable na ipinasa sa command line sa kapaligiran nang paisa-isa.
Ang mga variable na ipinasa sa command line ay na-export pa rin sa pamamagitan ng MAKEFLAGS
variable ng kapaligiran. Maaaring maging kapaki-pakinabang ang opsyong ito sa mga system na may maliit na limitasyon
sa laki ng mga argumento ng command.
variable=halaga
Itakda ang halaga ng variable nagbabago sa halaga. Karaniwan, ang lahat ng mga halaga ay ipinasa sa
Ang command line ay ini-export din sa mga sub-make sa kapaligiran. Ang -X bandila
hindi pinapagana ang gawi na ito. Dapat sundin ng mga variable na takdang-aralin ang mga opsyon para sa POSIX
compatibility ngunit walang pag-uutos na ipinapatupad.
Mayroong pitong magkakaibang uri ng mga linya sa isang makefile: mga detalye ng dependency ng file,
shell command, variable na takdang-aralin, isama ang mga pahayag, conditional na direktiba, para sa mga loop,
at mga puna.
Sa pangkalahatan, ang mga linya ay maaaring ipagpatuloy mula sa isang linya patungo sa susunod sa pamamagitan ng pagtatapos ng mga ito sa isang backslash
('\'). Ang sumusunod na karakter ng bagong linya at inisyal na whitespace sa sumusunod na linya ay
na-compress sa isang solong espasyo.
FILE DEPENDENCY Mismong Katangian
Ang mga linya ng dependency ay binubuo ng isa o higit pang mga target, isang operator, at zero o higit pang mga mapagkukunan.
Lumilikha ito ng isang relasyon kung saan ang mga target ay "nakadepende" sa mga pinagmulan at karaniwan ay
nilikha mula sa kanila. Natutukoy ang eksaktong ugnayan sa pagitan ng target at pinagmulan
ng operator na naghihiwalay sa kanila. Ang tatlong operator ay ang mga sumusunod:
: Ang isang target ay itinuturing na luma na kung ang oras ng pagbabago nito ay mas mababa kaysa sa anuman
ng mga pinagmumulan nito. Ang mga mapagkukunan para sa isang target ay nag-iipon sa mga linya ng dependency kapag ito
ginagamit ang operator. Ang target ay aalisin kung bmake nagambala.
! Palaging muling ginagawa ang mga target, ngunit hindi hanggang sa masuri at muling masuri ang lahat ng mga mapagkukunan.
nilikha kung kinakailangan. Ang mga mapagkukunan para sa isang target ay nag-iipon sa mga linya ng dependency kapag ito
ginagamit ang operator. Ang target ay aalisin kung bmake nagambala.
:: Kung walang tinukoy na mga mapagkukunan, palaging muling gagawin ang target. Kung hindi, ang isang target ay
itinuturing na hindi napapanahon kung ang alinman sa mga pinagmumulan nito ay nabago nang mas kamakailan kaysa sa
target. Ang mga mapagkukunan para sa isang target ay hindi naiipon sa mga linya ng dependency kapag ito
ginagamit ang operator. Ang target ay hindi aalisin kung bmake nagambala.
Ang mga target at source ay maaaring maglaman ng mga value ng shell wildcard na '?', '*', '[]', at '{}'. Ang
ang mga halagang '?', '*', at '[]' ay maaari lamang gamitin bilang bahagi ng panghuling bahagi ng target o
pinagmulan, at dapat gamitin upang ilarawan ang mga kasalukuyang file. Ang halagang '{}' ay hindi kailangang maging
ginagamit upang ilarawan ang mga umiiral na file. Ang pagpapalawak ay nasa ayos ng direktoryo, hindi ayon sa alpabeto
tapos sa shell.
KABIBI UTOS
Ang bawat target ay maaaring nauugnay dito ng isa o higit pang mga linya ng shell command, na karaniwang ginagamit
upang lumikha ng target. Ang bawat isa sa mga linya sa script na ito dapat maunahan ng isang tab. (Para sa
makasaysayang dahilan, ang mga espasyo ay hindi tinatanggap.) Habang ang mga target ay maaaring lumitaw sa maraming dependency
mga linya kung ninanais, bilang default, isa lamang sa mga panuntunang ito ang maaaring sundin ng isang script ng paggawa.
Kung ang '::' operator ay ginagamit, gayunpaman, ang lahat ng mga patakaran ay maaaring may kasamang mga script at ang mga script ay
isinagawa sa pagkakasunud-sunod na natagpuan.
Ang bawat linya ay itinuturing bilang isang hiwalay na shell command, maliban kung ang dulo ng linya ay nakatakas na may a
backslash ('\') kung saan ang linyang iyon at ang susunod ay pinagsama. Kung ang mga unang tauhan
ng utos ay anumang kumbinasyon ng '@','+', o'-', ang utos ay espesyal na ginagamot. A
'@' nagiging sanhi ng utos na hindi i-echoed bago ito maisakatuparan. A'+' sanhi ng utos sa
ipapatupad kahit kailan -n ay ibinigay. Ito ay katulad ng epekto ng .MAKE espesyal
source, maliban na ang epekto ay maaaring limitado sa isang linya ng isang script. A'-' sa
compatibility mode ay nagiging sanhi ng anumang non-zero exit status ng command line na hindi papansinin.
Kailan bmake ay pinapatakbo sa mode ng trabaho na may -j max_jobs, ang buong script para sa target ay ipapakain sa
isang halimbawa ng shell. Sa compatibility (non-jobs) mode, ang bawat command ay pinapatakbo sa a
hiwalay na proseso. Kung ang command ay naglalaman ng anumang mga shell meta character
('#=|^(){};&<>*?[]:$`\\n') ipapasa ito sa shell; kung hindi bmake susubukan
direktang pagpapatupad. Kung ang isang linya ay nagsisimula sa '-' at ang shell ay pinagana ang ErrCtl pagkatapos ay nabigo
ng command line ay hindi papansinin tulad ng sa compatibility mode. kung hindi'-' nakakaapekto sa
buong trabaho; ang script ay titigil sa unang command line na nabigo, ngunit ang target ay
hindi maituturing na nabigo.
Makefiles ay dapat na nakasulat upang ang mode ng bmake operasyon ay hindi nagbabago sa kanilang
pag-uugali. Halimbawa, anumang command na kailangang gumamit ng "cd" o "chdir" nang walang potensyal
ang pagpapalit ng direktoryo para sa kasunod na mga utos ay dapat ilagay sa mga panaklong upang ito ay maisakatuparan
sa isang subshell. Upang pilitin ang paggamit ng isang shell, takasan ang mga linya break upang gawin ang
buong script isang utos. Halimbawa:
iwas-chdir-side-effects:
@echo Building $@ sa `pwd`
@(cd ${.CURDIR} && ${MAKE} $@)
@echo Bumalik sa `pwd`
ensure-one-shell-regardless-of-mode:
@echo Building $@ sa `pwd`; \
(cd ${.CURDIR} && ${MAKE} $@); \
echo Bumalik sa `pwd`
Dahil sa bmake habilin chdir(2) sa '.OBJDIR' bago isagawa ang anumang mga target, iproseso ng bawat bata
nagsisimula sa iyon bilang kasalukuyang gumaganang direktoryo nito.
VARIABLE TAKDANG-ARALIN
Ang mga variable na ginawa ay halos katulad ng mga variable sa shell, at, ayon sa tradisyon, ay binubuo ng lahat
malalaking titik.
Paiba-iba trabaho nagbabago
Ang limang operator na maaaring gamitin upang magtalaga ng mga halaga sa mga variable ay ang mga sumusunod:
= Italaga ang halaga sa variable. Ang anumang nakaraang halaga ay na-override.
+= Idagdag ang halaga sa kasalukuyang halaga ng variable.
?= Italaga ang halaga sa variable kung hindi pa ito natukoy.
:= Magtalaga gamit ang pagpapalawak, ibig sabihin, palawakin ang halaga bago ito italaga sa variable.
Karaniwan, ang pagpapalawak ay hindi ginagawa hanggang ang variable ay isinangguni. NOTA: Mga sanggunian
sa hindi natukoy na mga variable ay hindi pinalawak. Maaari itong magdulot ng mga problema kapag nagbabago
ginagamit ang mga modifier.
!= Palawakin ang halaga at ipasa ito sa shell para sa pagpapatupad at italaga ang resulta sa
variable. Anumang mga bagong linya sa resulta ay papalitan ng mga puwang.
Anumang white-space bago ang itinalaga halaga ay tinanggal; kung ang halaga ay idinaragdag, a
Ang isang puwang ay ipinasok sa pagitan ng mga nakaraang nilalaman ng variable at ang nakadugtong
halaga.
Ang mga variable ay pinalawak sa pamamagitan ng pagpaligid sa pangalan ng variable na may alinman sa mga kulot na brace ('{}') o
panaklong ('()') at sa unahan nito ng dollar sign ('$'). Kung naglalaman ang pangalan ng variable
isang titik lamang, hindi kailangan ang mga nakapaligid na braces o panaklong. Mas maikli ito
hindi inirerekomenda ang form.
Kung ang variable na pangalan ay naglalaman ng isang dolyar, ang pangalan mismo ay unang pinalawak. Ito ay nagpapahintulot
halos di-makatwirang variable na mga pangalan, gayunpaman, mga pangalan na naglalaman ng dolyar, braces, panaklong, o
ang whitespace ay talagang pinakamahusay na iwasan!
Kung ang resulta ng pagpapalawak ng variable ay naglalaman ng dollar sign ('$') ang string ay pinalawak
muli.
Nagaganap ang pagpapalit ng variable sa tatlong magkakaibang beses, depende kung nasaan ang variable
ginagamit.
1. Ang mga variable sa mga linya ng dependency ay pinalawak habang binabasa ang linya.
2. Ang mga variable sa shell command ay pinalawak kapag ang shell command ay naisakatuparan.
3. Ang mga variable ng index ng loop na ".for" ay pinalawak sa bawat pag-ulit ng loop. Tandaan na ang iba
ang mga variable ay hindi pinalawak sa loob ng mga loop kaya ang sumusunod na halimbawang code:
.para sa i sa 1 2 3
a+= ${i}
j= ${i}
b+= ${j}
.endfor
lahat:
@echo ${a}
@echo ${b}
ay magpi-print:
+1 2 3
+3 3 3
Dahil habang ang ${a} ay naglalaman ng "1 2 3" pagkatapos maisagawa ang loop, ang ${b} ay naglalaman ng "${j}
${j} ${j}” na lumalawak sa “3 3 3” dahil pagkatapos makumpleto ng loop ang ${j} ay naglalaman ng “3”.
Paiba-iba klase
Ang apat na magkakaibang klase ng mga variable (sa pagkakasunud-sunod ng pagtaas ng precedence) ay:
Mga variable ng kapaligiran
Ang mga variable ay tinukoy bilang bahagi ng bmakekapaligiran ni.
Mga variable sa mundo
Tinukoy ang mga variable sa makefile o sa mga kasamang makefile.
Mga variable ng command line
Tinukoy ang mga variable bilang bahagi ng command line.
Mga lokal na variable
Mga variable na tinukoy na partikular sa isang tiyak na target.
Ang mga lokal na variable ay nakapaloob lahat at ang mga halaga ng mga ito ay nag-iiba-iba mula sa target hanggang sa target. Ito
kasalukuyang hindi posibleng tumukoy ng mga bagong lokal na variable. Ang pitong lokal na variable ay bilang
sumusunod:
.ALLSRC Ang listahan ng lahat ng mga mapagkukunan para sa target na ito; kilala din sa '>'.
.ARCHIVE Ang pangalan ng archive file; kilala din sa '!'.
.IMPSRC Sa suffix-transformation rules, ang pangalan/path ng source kung saan ang
ang target ay dapat baguhin (ang "ipinahiwatig" na pinagmulan); kilala din sa '<'. Ito
ay hindi tinukoy sa tahasang mga tuntunin.
.MIYEMBRO Ang pangalan ng miyembro ng archive; kilala din sa '%'.
.OODATE Ang listahan ng mga mapagkukunan para sa target na ito na itinuring na hindi napapanahon; kilala rin
bilang '?'.
.PREFIX Ang prefix ng file ng target, na naglalaman lamang ng bahagi ng file, walang suffix
o mga naunang bahagi ng direktoryo; kilala din sa '*'. Ang suffix ay dapat
isa sa mga kilalang panlapi na ipinahayag na may .SUFFIXES o hindi na
kinikilala
.TARGET Ang pangalan ng target; kilala din sa '@'.
Ang mas maikling mga anyo ('>','!','<','%','?','*', at'@') ay pinahihintulutan para sa paatras
pagiging tugma sa mga makasaysayang makefile at legacy na ginawa ng POSIX at hindi inirerekomenda.
Mga variant ng mga variable na ito na may bantas na sinusundan kaagad ng 'D' o 'F', hal
'$(@D)', ay mga legacy form na katumbas ng paggamit ng ':H' at ':T' modifiers. Ang mga form na ito ay
tinanggap para sa pagiging tugma sa AT&T System V UNIX makefiles at POSIX ngunit hindi
inirerekumenda.
Apat sa mga lokal na variable ay maaaring gamitin sa mga mapagkukunan sa mga linya ng dependency dahil lumalawak ang mga ito
sa tamang halaga para sa bawat target sa linya. Ang mga variable na ito ay '.TARGET','.PREFIX',
'.ARCHIVE', at'.MIYEMBRO'.
karagdagan built-in mga variable
Sa karagdagan, bmake nagtatakda o nakakaalam tungkol sa mga sumusunod na variable:
$ Ang isang solong dollar sign na '$', ibig sabihin, '$$' ay lumalawak sa isang solong dollar sign.
.ALLTARGETS Ang listahan ng lahat ng mga target na nakatagpo sa Makefile. Kung susuriin sa panahon
Makefile parsing, naglilista lamang ng mga target na nakatagpo sa ngayon.
.CURDIR Isang landas patungo sa direktoryo kung saan bmake ay pinatay. Sumangguni sa paglalarawan
ng 'PWD' para sa karagdagang detalye.
.INCLUDEDFROMDIR
Ang direktoryo ng file kung saan kasama ang Makefile na ito.
.INCLUDEDFROMFILE
Ang filename ng file kung saan kasama ang Makefile na ito.
GUMAGAWA Ang pangalan na bmake ay pinaandar na may (argv[0]). Para sa compatibility bmake
nagtatakda din .GUMAWA na may parehong halaga. Ang gustong gamitin na variable ay ang
environment variable MAKE dahil mas tugma ito sa ibang mga bersyon
of bmake at hindi maaaring malito sa espesyal na target na may parehong pangalan.
.GUMAWA.DEPENDFILE
Pangalanan ang makefile (default '.depende') kung saan ang mga nabuong dependencies ay
basahin.
.MAKE.EXPAND_VARIABLES
Isang boolean na kumokontrol sa default na gawi ng -V pagpipilian.
.GUMAWA. NA-EXPORT Ang listahan ng mga variable na na-export ni bmake.
.GUMAWA. MGA TRABAHO Ang argumento sa -j pagpipilian.
.MAKE.TRABAHO.PREFIX
If bmake ay tumatakbo kasama j pagkatapos ay ang output para sa bawat target ay may prefix na token
'--- target ---' ang unang bahagi nito ay makokontrol sa pamamagitan ng
.MAKE.TRABAHO.PREFIX. Kung .MAKE.TRABAHO.PREFIX walang laman, walang naka-print na token.
Halimbawa: .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] ay
gumawa ng mga token tulad ng '---make[1234] target ---' na nagpapadali sa pagsubaybay sa
antas ng paralelismo na nakakamit.
MAKEFLAGS Ang variable ng kapaligiran na 'MAKEFLAGS' ay maaaring maglaman ng kahit ano
tinukoy sa bmakecommand line ni. Anumang bagay na tinukoy sa bmakeutos ni
linya ay idinagdag sa 'MAKEFLAGS' variable na pagkatapos ay ipinasok sa
kapaligiran para sa lahat ng mga programa na bmake nagpapatupad.
.GUMAWA.LEVEL Ang lalim ng recursion ng bmake. Ang unang pagkakataon ng bmake ay magiging 0, at
ang isang incremented na halaga ay inilalagay sa kapaligiran upang makita ng susunod
henerasyon. Nagbibigay-daan ito sa mga pagsubok tulad ng: .if ${.MAKE.LEVEL} == 0 na protektahan
mga bagay na dapat lamang suriin sa unang pagkakataon ng bmake.
.MAKE.MAKEFILE_PREFERENCE
Ang inayos na listahan ng mga pangalan ng makefile (default 'makefile','Makefile') iyon
bmake hahanapin.
.GUMAWA.MAKEFILES
Ang listahan ng mga makefile na binasa ni bmake, na kapaki-pakinabang para sa pagsubaybay
dependencies. Ang bawat makefile ay naitala nang isang beses lamang, anuman ang bilang
ng mga beses na nabasa.
.GUMAWA.MODE Naproseso pagkatapos basahin ang lahat ng makefiles. Maaaring makaapekto sa mode na bmake tumatakbo
sa. Maaari itong maglaman ng ilang mga keyword:
compat katulad -B, naglalagay bmake sa "compat" mode.
meta Naglalagay bmake sa "meta" mode, kung saan nilikha ang mga meta file
bawat target upang makuha ang command run, ang output na nabuo at
if pilemon(4) ay magagamit, ang sistema ng mga tawag na kung saan ay ng
interes sa bmake. Ang nakuhang output ay maaaring maging lubhang kapaki-pakinabang kapag
pag-diagnose ng mga error.
curdirOk= bf Karaniwan bmake hindi lilikha ng .meta file sa '.CURDIR'. Ito
maaaring ma-override sa pamamagitan ng pagtatakda bf sa isang halaga na kumakatawan
Totoo.
env Para sa pag-debug, maaari itong maging kapaki-pakinabang na isama ang kapaligiran
ang .meta file.
pandiwang Kung nasa "meta" mode, mag-print ng clue tungkol sa target na ginagawa.
Ito ay kapaki-pakinabang kung ang build ay tumatakbo nang tahimik. Ang
naka-print ang mensahe ng halaga ng: .GUMAWA.META.PREFIX.
huwag pansinin-cmd Ang ilang mga makefile ay may mga utos na sadyang hindi matatag. Ito
Ang keyword ay nagdudulot sa kanila na hindi papansinin para sa pagtukoy kung a
luma na ang target sa "meta" mode. Tingnan din .NOMETA_CMP.
tahimik= bf If bf ay Totoo, kapag ang isang .meta file ay ginawa, markahan ang target
.TAHIMIK.
.MAKE.META.BAILIWICK
Sa "meta" mode, nagbibigay ng listahan ng mga prefix na tumutugma sa mga direktoryo
Kinokontrol ng bmake. Kung ang isang file na nabuo sa labas ng .OBJDIR pero
sa loob ng nasabing bailiwick ay nawawala, ang kasalukuyang target ay itinuturing na out-of-
petsa.
.GUMAWA.META.NAGAWA
Sa "meta" mode, naglalaman ang variable na ito ng listahan ng lahat ng meta file na na-update.
Kung hindi walang laman, maaari itong magamit upang ma-trigger ang pagproseso ng .GUMAWA.META.FILES.
.GUMAWA.META.FILES
Sa "meta" mode, naglalaman ang variable na ito ng listahan ng lahat ng meta file na ginamit
(na-update o hindi). Maaaring gamitin ang listahang ito upang iproseso ang mga meta file sa
kunin ang impormasyon ng dependency.
.MAKE.META.IGNORE_PATHS
Nagbibigay ng listahan ng mga prefix ng path na dapat hindi papansinin; dahil ang
ang mga nilalaman ay inaasahang magbabago sa paglipas ng panahon. Kasama sa default na listahan ang: '/ dev
/ atbp / proc / Tmp / var / run / var / tmp'
.GUMAWA.META.PREFIX
Tinutukoy ang mensaheng naka-print para sa bawat meta file na na-update sa "meta verbose"
mode. Ang default na halaga ay:
Gusali ${.TARGET:H:tA}/${.TARGET:T}
.MAKEOVERRIDES Ang variable na ito ay ginagamit upang itala ang mga pangalan ng mga variable na itinalaga sa
command line, upang sila ay ma-export bilang bahagi ng 'MAKEFLAGS'. Ito
maaaring hindi paganahin ang pag-uugali sa pamamagitan ng pagtatalaga ng walang laman na halaga sa '.MAKEOVERRIDES'
sa loob ng isang makefile. Maaaring i-export ang mga karagdagang variable mula sa isang makefile sa pamamagitan ng
pagdaragdag ng kanilang mga pangalan sa '.MAKEOVERRIDES'. Ang 'MAKEFLAGS' ay muling na-export
kahit kailan'.MAKEOVERRIDES' ay binago.
.MAKE.PATH_FILEMON
If bmake ay itinayo gamit ang pilemon(4) suporta, ito ay nakatakda sa landas ng
node ng device. Nagbibigay-daan ito sa makefiles na subukan ang suportang ito.
.MAKE.PID Ang proseso-id ng bmake.
.GUMAWA.PPID Ang parent process-id ng bmake.
.MAKIKIPIT_DOLLAR
ang value ay dapat na isang boolen na kumokontrol kung ang '$$' ay pinapanatili kapag ginagawa
':=' mga takdang-aralin. Ang default ay false, para sa backwards compatability. Itakda
sa true para sa pagiging tugma sa iba pang mga gawa. Kung nakatakda sa false, magiging '$$'
'$' ayon sa normal na mga panuntunan sa pagsusuri.
MAKE_PRINT_VAR_ON_ERROR
Kailan bmake huminto dahil sa isang error, ini-print nito ang pangalan nito at ang halaga ng
'.CURDIR' pati na rin ang halaga ng anumang mga variable na pinangalanan sa
'MAKE_PRINT_VAR_ON_ERROR'.
.bagong linya Ang variable na ito ay itinalaga lamang ng isang newline na character bilang halaga nito. Ito
nagbibigay-daan sa mga pagpapalawak gamit ang :@ modifier upang maglagay ng bagong linya sa pagitan ng mga pag-ulit
ng loop sa halip na isang espasyo. Halimbawa, ang pag-imprenta ng
'MAKE_PRINT_VAR_ON_ERROR' ay maaaring gawin bilang
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}.
.OBJDIR Isang landas patungo sa direktoryo kung saan binuo ang mga target. Ang halaga nito ay
tinutukoy sa pamamagitan ng pagsisikap na chdir(2) sa mga sumusunod na direktoryo sa pagkakasunud-sunod at
gamit ang unang tugma:
1. ${MAKEOBJDIRPREFIX}${.CURDIR}
(Tanging kung ang 'MAKEOBJDIRPREFIX' ay nakatakda sa kapaligiran o sa command
linya.)
2. ${MAKEOBJDIR}
(Tanging kung ang 'MAKEOBJDIR' ay nakatakda sa kapaligiran o sa utos
linya.)
3. ${.CURDIR}/obj.${MACHINE}
4. ${.CURDIR}/obj
5. /usr/obj/${.CURDIR}
6. ${.CURDIR}
Ginagawa ang pagpapalawak ng variable sa halaga bago ito gamitin, kaya
mga ekspresyon tulad ng
${.CURDIR:S,^/ usr / src,/var/obj,}
maaaring gamitin. Ito ay lalong kapaki-pakinabang sa 'MAKEOBJDIR'.
'.OBJDIR' ay maaaring mabago sa makefile sa pamamagitan ng espesyal na target '.OBJDIR'.
Sa lahat ng mga kaso, bmake habilin chdir(2) sa tinukoy na direktoryo kung mayroon ito,
at itakda '.OBJDIR' at 'PWD' sa direktoryong iyon bago isagawa ang anumang mga target.
.PARSEDIR Isang landas patungo sa direktoryo ng kasalukuyang 'Makefile' ini-parse.
.PARSEFILE Ang basename ng kasalukuyang 'Makefile' ini-parse. Ang variable na ito at
'.PARSEDIR' ay parehong nakatakda lamang habang ang 'Makefiles' ay pini-parse. Kung
gusto mong panatilihin ang kanilang mga kasalukuyang halaga, italaga ang mga ito sa isang variable gamit
takdang-aralin na may pagpapalawak: (':=').
.DAAN Isang variable na kumakatawan sa listahan ng mga direktoryo na bmake maghahanap
para sa mga file. Ang listahan ng paghahanap ay dapat na ma-update gamit ang target na '.DAAN'
kaysa sa variable.
PWD Alternate path sa kasalukuyang direktoryo. bmake karaniwang nagtatakda '.CURDIR'sa
ang canonical path na ibinigay ng getcwd(3). Gayunpaman, kung ang kapaligiran variable
Ang 'PWD' ay nakatakda at nagbibigay ng landas sa kasalukuyang direktoryo, kung gayon bmake set
'.CURDIR' sa halaga ng 'PWD' sa halip. Ang gawi na ito ay hindi pinagana kung
Nakatakda ang 'MAKEOBJDIRPREFIX' o ang 'MAKEOBJDIR' ay naglalaman ng variable na pagbabago.
Ang 'PWD' ay nakatakda sa halaga ng '.OBJDIR' para sa lahat ng mga programa na bmake
nagpapatupad.
.TARGETS Ang listahan ng mga target na tahasang tinukoy sa command line, kung mayroon man.
VPATH Colon-separated (“:”) mga listahan ng mga direktoryo na bmake maghahanap ng mga file.
Ang variable ay suportado para sa pagiging tugma sa lumang gumawa ng mga programa lamang, gamitin
'.DAAN' sa halip.
Paiba-iba nagbabago
Maaaring baguhin ang pagpapalawak ng variable upang piliin o baguhin ang bawat salita ng variable (kung saan ang a
Ang "salita" ay white-space delimited sequence ng mga character). Ang pangkalahatang format ng isang variable
Ang pagpapalawak ay ang mga sumusunod:
${variable[:modifier[:...]]}
Ang bawat modifier ay nagsisimula sa isang colon, na maaaring i-escape gamit ang isang backslash ('\').
Maaaring tukuyin ang isang hanay ng mga modifier sa pamamagitan ng isang variable, tulad ng sumusunod:
modifier_variable=modifier[:...]
${variable:${modifier_variable}[:...]}
Sa kasong ito ang unang modifier sa modifier_variable ay hindi nagsisimula sa isang colon, dahil
na dapat lumabas sa reference na variable. Kung alinman sa mga modifier sa
Ang modifier_variable ay naglalaman ng dollar sign ('$'), dapat na doblehin ang mga ito upang maiwasan nang maaga
expansion.
Ang mga sinusuportahang modifier ay:
:E Pinapalitan ang bawat salita sa variable ng suffix nito.
:H Pinapalitan ang bawat salita sa variable ng lahat maliban sa huling bahagi.
:Mhuwaran
Piliin lamang ang mga salitang tumutugma huwaran. Ang karaniwang mga character na wildcard ng shell
('*', '?', at '[]') ay maaaring gamitin. Maaaring i-escape ang mga wildcard na character gamit ang a
backslash ('\'). Bilang resulta ng paraan ng paghahati ng mga halaga sa mga salita, tugma, at
pagkatapos ay sumali, isang bumuo tulad ng
${VAR:M*}
ay gawing normal ang inter-word spacing, aalisin ang lahat ng leading at trailing space, at
pag-convert ng maraming magkakasunod na puwang sa iisang puwang.
:Nhuwaran
Ito ay kapareho ng ':M', ngunit pinipili ang lahat ng mga salita na hindi tumutugma huwaran.
:O Pagsunud-sunurin ang bawat salita sa variable ayon sa alpabeto. Upang pagbukud-bukurin ang mga salita sa reverse order gamitin ang
':O:[-1..1]' kumbinasyon ng mga modifier.
: Baka I-randomize ang mga salita sa variable. Magiiba ang mga resulta sa bawat oras na iyong tinutukoy
sa binagong variable; gamitin ang takdang-aralin na may pagpapalawak (':=') upang maiwasan ang ganoon
pag-uugali. Halimbawa,
LIST= uno due tre quattro
RANDOM_LIST= ${LIST:Ox}
STATIC_RANDOM_LIST:= ${LIST:Ox}
lahat:
@echo "${RANDOM_LIST}"
@echo "${RANDOM_LIST}"
@echo "${STATIC_RANDOM_LIST}"
@echo "${STATIC_RANDOM_LIST}"
maaaring makagawa ng output katulad ng:
quattro due tre uno
tre due quattro uno
dahil uno quattro tre
dahil uno quattro tre
:Q Sinipi ang bawat shell meta-character sa variable, para ligtas itong maipasa
sa pamamagitan ng recursive invocations ng bmake.
:R Pinapalitan ang bawat salita sa variable ng lahat maliban sa suffix nito.
:gmtime
Ang halaga ay isang format na string para sa strftime(3), gamit ang kasalukuyang gmtimeNa (3).
:hash
Mag-compute ng 32bit na hash ng value at i-encode ito bilang hex digit.
:lokal na Oras
Ang halaga ay isang format na string para sa strftime(3), gamit ang kasalukuyang lokal na OrasNa (3).
:tA Subukang i-convert ang variable sa isang absolute path gamit realpath(3), kung mabigo iyon, ang
hindi nagbabago ang halaga.
:tl Kino-convert ang variable sa maliliit na titik.
:tsc
Ang mga salita sa variable ay karaniwang pinaghihiwalay ng isang puwang sa pagpapalawak. Ang modifier na ito
itinatakda ang separator sa karakter c. Kung c ay tinanggal, pagkatapos ay walang separator na ginagamit.
Ang mga karaniwang escape (kabilang ang mga octal numeric code), ay gumagana tulad ng inaasahan.
:tu Kino-convert ang variable sa malalaking titik.
:tW Nagiging sanhi ng halaga upang ituring bilang isang salita (posibleng naglalaman ng naka-embed na puti
space). Tingnan din ':[*]'.
:tw Nagiging sanhi ng halaga upang ituring bilang isang pagkakasunud-sunod ng mga salita na nililimitahan ng white space. Tingnan mo
din ':[@]'.
:S/old_string/bagong_string/[1gW]
Baguhin ang unang paglitaw ng old_string sa halaga ng variable, pinapalitan ito ng
bagong_string. Kung ang isang 'g' ay idinagdag sa huling slash ng pattern, lahat ng paglitaw ay nasa
pinapalitan ang bawat salita. Kung ang isang '1' ay idinagdag sa huling slash ng pattern, lamang
apektado ang unang salita. Kung ang isang 'W' ay idinagdag sa huling slash ng pattern,
pagkatapos ay ituturing ang halaga bilang isang salita (posibleng naglalaman ng naka-embed na puting espasyo).
If old_string nagsisimula sa isang caret ('^'), old_string ay nakaangkla sa simula ng
bawat salita. Kung old_string nagtatapos sa isang dollar sign ('$'), ito ay naka-angkla sa dulo ng
bawat salita. Sa loob bagong_string, ang isang ampersand ('&') ay pinapalitan ng old_string (walang
anumang '^' o '$'). Anumang karakter ay maaaring gamitin bilang isang delimiter para sa mga bahagi ng
string ng modifier. Ang anchoring, ampersand at delimiter na mga character ay maaaring i-escape gamit ang
isang backslash ('\').
Ang pagpapalawak ng variable ay nangyayari sa normal na paraan sa loob ng dalawa old_string at bagong_string
na may isang pagbubukod na ang isang backslash ay ginagamit upang maiwasan ang pagpapalawak ng isang dolyar
sign ('$'), hindi isang naunang dollar sign gaya ng nakasanayan.
:C/huwaran/kapalit/[1gW]
Ang :C ang modifier ay katulad ng :S modifier maliban na ang luma at bagong mga string,
sa halip na maging simpleng mga string, ay isang pinahabang regular na expression (tingnan regex(3))
pisi huwaran at isang ed(1)-style na string kapalit. Karaniwan, ang unang pangyayari
ng pattern huwaran sa bawat salita ng halaga ay pinapalitan ng kapalit. ang
Ang '1' modifier ay nagiging sanhi ng pagpapalit na ilapat sa hindi hihigit sa isang salita; ang 'g' modifier
nagiging sanhi ng pagpapalit na mailapat sa pinakamaraming pagkakataon ng pattern ng paghahanap huwaran as
mangyari sa salita o mga salita kung saan matatagpuan ito; ang 'W' modifier ay nagiging sanhi ng halaga
itinuturing bilang isang salita (posibleng naglalaman ng naka-embed na puting espasyo). Tandaan na ang '1' at
'g' ay orthogonal; ang una ay tumutukoy kung ang maramihang mga salita ay potensyal
apektado, ang huli kung maraming pagpapalit ang maaaring maganap sa loob ng bawat isa
apektadong salita.
Tulad ng para sa :S modifier, ang huwaran at kapalit ay napapailalim sa variable expansion
bago i-parse bilang mga regular na expression.
:T Pinapalitan ang bawat salita sa variable ng huling bahagi nito.
:u Alisin ang mga katabing duplicate na salita (tulad ng kakaiba(1)).
:?true_string:false_string
Kung ang pangalan ng variable (hindi ang halaga nito), kapag na-parse bilang .if conditional expression,
sinusuri sa true, ibalik bilang halaga nito ang true_string, kung hindi, ibalik ang
false_string. Dahil ginagamit ang variable na pangalan bilang expression, :? dapat ang una
modifier pagkatapos ng variable na pangalan mismo - na, siyempre, ay karaniwang naglalaman
variable na pagpapalawak. Ang isang karaniwang error ay sinusubukang gumamit ng mga expression tulad ng
${NUMBERS:M42:?match:no}
na aktwal na sumusubok na tinukoy(NUMERO), upang matukoy kung ang anumang mga salita ay tumutugma sa "42" na kailangan mo
gumamit ng isang bagay tulad ng:
${"${NUMBERS:M42}" !="":?match:no}.
:old_string=new_string
Ito ang AT&T System V UNIX style variable substitution. Dapat ito na ang huli
tinukoy ang modifier. Kung old_string or bagong_string hindi naglalaman ng pattern na tumutugma
katangian % pagkatapos ay ipinapalagay na ang mga ito ay nakaangkla sa dulo ng bawat salita, kaya lamang
maaaring palitan ang mga panlapi o buong salita. Kung hindi % ay ang substring ng old_string
na papalitan sa bagong_string.
Ang pagpapalawak ng variable ay nangyayari sa normal na paraan sa loob ng dalawa old_string at bagong_string
na may isang pagbubukod na ang isang backslash ay ginagamit upang maiwasan ang pagpapalawak ng isang dolyar
sign ('$'), hindi isang naunang dollar sign gaya ng nakasanayan.
:@temp@pisi@
Ito ang mekanismo ng pagpapalawak ng loop mula sa OSF Development Environment (ODE) make.
Hindi magkatulad .para sa Nangyayari ang pagpapalawak ng mga loop sa oras ng sanggunian. Magtalaga temp sa bawat salita
sa baryabol at suriin pisi. Ang ODE convention ay iyon temp dapat magsimula at
magtatapos sa isang tuldok. Halimbawa.
${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
Gayunpaman ang isang solong variable ng character ay kadalasang mas nababasa:
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
:Unewval
Kung ang variable ay hindi natukoy newval ay ang halaga. Kung ang variable ay tinukoy, ang
ibinalik ang umiiral na halaga. Ito ay isa pang tampok na paggawa ng ODE. Ito ay madaling gamitin para sa pag-set
bawat-target na CFLAGS halimbawa:
${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
Kung ang isang halaga ay kinakailangan lamang kung ang variable ay hindi natukoy, gamitin ang:
${VAR:D:Unewval}
:Dnewval
Kung ang variable ay tinukoy newval ay ang halaga.
:L Ang pangalan ng variable ay ang halaga.
:P Ang path ng node na may parehong pangalan ng variable ay ang halaga. Kung walang ganyan
umiiral ang node o null ang landas nito, pagkatapos ay gagamitin ang pangalan ng variable. Para sa
ang modifier na ito upang gumana, ang pangalan (node) ay dapat na hindi bababa sa lumitaw sa rhs ng a
pagtitiwala
:!cmd!
Ang output ng pagtakbo cmd ay ang halaga.
:sh Kung ang variable ay hindi walang laman ito ay tatakbo bilang isang command at ang output ay magiging bago
halaga.
:: =STR
Ang variable ay itinalaga ang halaga STR pagkatapos ng pagpapalit. Ang modifier na ito at nito
Ang mga pagkakaiba-iba ay kapaki-pakinabang sa mga hindi malinaw na sitwasyon tulad ng gustong magtakda ng variable kung kailan
Ang mga utos ng shell ay na-parse. Ang mga modifier ng assignment na ito ay palaging lumalawak sa wala,
kaya kung lilitaw sa isang linya ng panuntunan sa pamamagitan ng kanilang mga sarili ay dapat na mauna sa isang bagay na panatilihin
bmake masaya.
Ang '::' tumutulong na maiwasan ang mga maling tugma sa estilo ng AT&T System V UNIX := modifier at
dahil ang pagpapalit ay palaging nangyayari ang :: = ang anyo ay malabo na angkop.
::?=STR
Tulad ng para sa :: = ngunit kung ang variable ay wala pang halaga.
::+=STR
Mag-aplay STR sa variable.
::!=cmd
Italaga ang output ng cmd sa variable.
:[saklaw]
Pumipili ng isa o higit pang mga salita mula sa halaga, o nagsasagawa ng iba pang mga operasyong nauugnay sa
paraan kung saan ang halaga ay nahahati sa mga salita.
Karaniwan, ang isang halaga ay itinuturing bilang isang pagkakasunud-sunod ng mga salita na nililimitahan ng puting espasyo. Ang ilan
pinipigilan ng mga modifier ang pag-uugaling ito, na nagiging sanhi ng isang halaga na ituring bilang isang salita
(posibleng naglalaman ng naka-embed na puting espasyo). Isang walang laman na halaga, o isang halaga na binubuo
ganap na white-space, ay itinuturing bilang isang salita. Para sa mga layunin ng ':[]'
modifier, ang mga salita ay ini-index sa parehong pasulong gamit ang mga positibong integer (kung saan ang index 1
kumakatawan sa unang salita), at pabalik gamit ang mga negatibong integer (kung saan ang index -1
kumakatawan sa huling salita).
Ang saklaw ay napapailalim sa variable expansion, at ang pinalawak na resulta ay pagkatapos
binibigyang kahulugan ang mga sumusunod:
index Pumili ng isang salita mula sa halaga.
simula..dulo
Pinipili ang lahat ng mga salita mula sa simula sa dulo, kasama. Halimbawa, ':[2..-1]' pumipili
lahat ng salita mula sa pangalawang salita hanggang sa huling salita. Kung simula ay mas malaki sa dulo,
pagkatapos ay ang mga salita ay output sa reverse order. Halimbawa, ':[-1..1]' pinipili ang lahat
ang mga salita mula sa huli hanggang sa una.
* Nagiging sanhi ng mga kasunod na modifier na ituring ang halaga bilang isang salita (maaaring
naglalaman ng naka-embed na puting espasyo). Katulad ng epekto ng "$*" sa Bourne
kabibi
0 Ang ibig sabihin ay pareho ng ':[*]'.
@ Nagiging sanhi ng mga kasunod na modifier upang ituring ang halaga bilang isang pagkakasunud-sunod ng mga salita na nililimitahan
sa pamamagitan ng puting espasyo. Katulad sa epekto ng "$@" sa Bourne shell.
# Ibinabalik ang bilang ng mga salita sa halaga.
MAISASALI MGA PAHAYAG, MGA KONDISYONAL AT PARA SA NAKAKITA
Makefile inclusion, conditional structures at para sa mga loop na nakapagpapaalaala sa C programming
wika ay ibinigay sa bmake. Ang lahat ng naturang mga istraktura ay nakikilala sa pamamagitan ng isang linya na nagsisimula sa
isang solong tuldok ('.') na character. Ang mga file ay kasama sa alinman .isama ⟨file⟩ o .isama
"file". Ang mga variable sa pagitan ng mga angle bracket o double quote ay pinalawak upang mabuo ang file
pangalan. Kung gagamitin ang mga angle bracket, ang kasamang makefile ay inaasahang nasa system
direktoryo ng makefile. Kung ginamit ang mga dobleng panipi, kasama ang direktoryo ng makefile at anuman
mga direktoryo na tinukoy gamit ang -I Ang opsyon ay hinanap bago ang direktoryo ng makefile ng system.
Para sa pagiging tugma sa iba pang mga bersyon ng bmake 'isama ang file ...' ay tinatanggap din.
Kung ang kasamang pahayag ay nakasulat bilang .-isama o bilang .isama pagkatapos ay mga error sa paghahanap at/o
hindi pinapansin ang pagbubukas kasama ang mga file.
Kung ang kasamang pahayag ay nakasulat bilang .isama hindi lamang ang mga error sa paghahanap at/o pagbubukas
isama ang mga file na hindi pinansin, ngunit ang mga lipas na dependency sa loob ng kasamang file ay babalewalain lamang
gaya ng .GUMAWA.DEPENDFILE.
Ang mga kondisyong expression ay pinangungunahan din ng isang tuldok bilang unang character ng isang linya.
Ang mga posibleng kondisyon ay ang mga sumusunod:
.error mensahe
Ang mensahe ay naka-print kasama ang pangalan ng makefile at numero ng linya, pagkatapos
bmake lalabas.
.export nagbabago ...
I-export ang tinukoy na global variable. Kung walang ibinigay na listahan ng variable, lahat ng globals
ay na-export maliban sa mga panloob na variable (mga nagsisimula sa '.'). Hindi ito
apektado ng -X bandila, kaya dapat gamitin nang may pag-iingat. Para sa pagiging tugma sa
iba bmake tinatanggap din ang mga programang 'export variable=value'.
Pagdaragdag ng isang variable na pangalan sa .GUMAWA. NA-EXPORT ay katumbas ng pag-export ng variable.
.export-env nagbabago ...
Kapareho ng '.export', maliban na ang variable ay hindi nakadugtong sa .GUMAWA. NA-EXPORT.
Nagbibigay-daan ito sa pag-export ng isang halaga sa kapaligiran na iba sa ginamit
by bmake sa loob.
.export-literal nagbabago ...
Kapareho ng '.export-env', maliban na ang mga variable sa halaga ay hindi pinalawak.
. Info mensahe
Ang mensahe ay naka-print kasama ang pangalan ng makefile at numero ng linya.
.undef nagbabago
I-undefine ang tinukoy na global variable. Ang mga pandaigdigang variable lang ang maaaring hindi matukoy.
.unexport nagbabago ...
Ang kabaligtaran ng '.export'. Ang tinukoy na global nagbabago ay aalisin mula sa
.GUMAWA. NA-EXPORT. Kung walang ibinigay na listahan ng variable, hindi na-export ang lahat ng global, at
.GUMAWA. NA-EXPORT tinanggal.
.unexport-env
I-unexport ang lahat ng mga global na dating na-export at i-clear ang kapaligiran na minana
ang magulang. Ang operasyong ito ay magdudulot ng memory leak ng orihinal na kapaligiran, kaya
dapat gamitin ng matipid. Pagsubok para sa .GUMAWA.LEVEL pagiging 0, ay may katuturan. Gayundin
tandaan na ang anumang mga variable na nagmula sa kapaligiran ng magulang ay dapat na
tahasang pinapanatili kung ninanais. Halimbawa:
.if ${.MAKE.LEVEL} == 0
PATH := ${PATH}
.unexport-env
.export ang PATH
.tapusin kung
Magreresulta sa isang kapaligiran na naglalaman lamang ng 'PATH', na pinakamababang kapaki-pakinabang
kapaligiran. Sa totoo lang '.MAKE.LEVEL' ay itutulak din sa bagong kapaligiran.
.babala mensahe
Ang mensaheng may prefix na 'babala:' ay naka-print kasama ang pangalan ng makefile
at numero ng linya.
.kung [!]pagpapahayag [opereytor pagpapahayag ...]
Subukan ang halaga ng isang expression.
.ifdef [!]nagbabago [opereytor nagbabago ...]
Subukan ang halaga ng isang variable.
.ifndef [!]nagbabago [opereytor nagbabago ...]
Subukan ang halaga ng isang variable.
.ifmake [!]target [opereytor target ...]
Subukan ang target na binuo.
.ifnmake [!] target [opereytor target ...]
Subukan ang target na binuo.
.iba Baligtarin ang kahulugan ng huling kondisyon.
.elif [!] pagpapahayag [opereytor pagpapahayag ...]
Isang kumbinasyon ng '.iba' sinundan ng'.kung'.
.elifdef [!]nagbabago [opereytor nagbabago ...]
Isang kumbinasyon ng '.iba' sinundan ng'.ifdef'.
.elifndef [!]nagbabago [opereytor nagbabago ...]
Isang kumbinasyon ng '.iba' sinundan ng'.ifndef'.
.elifmake [!]target [opereytor target ...]
Isang kumbinasyon ng '.iba' sinundan ng'.ifmake'.
.elifnmake [!]target [opereytor target ...]
Isang kumbinasyon ng '.iba' sinundan ng'.ifnmake'.
.tapusin kung Tapusin ang katawan ng kondisyon.
Ang opereytor maaaring alinman sa mga sumusunod:
|| Lohikal O.
&& Lohikal AT; na mas mataas kaysa sa “||”.
Tulad ng sa C, bmake susuriin lamang ang isang kondisyon hangga't kinakailangan upang matukoy ito
halaga. Maaaring gamitin ang mga panaklong upang baguhin ang pagkakasunud-sunod ng pagsusuri. Ang boolean operator '!'
ay maaaring gamitin upang lohikal na i-negate ang isang buong kondisyon. Ito ay mas mataas kaysa sa
'&&'.
Ang halaga ng mga pagpapahayag maaaring alinman sa mga sumusunod:
tinukoy Kinukuha ang isang variable na pangalan bilang isang argumento at sinusuri sa true kung ang variable ay naging
tinukoy.
gumawa Kinukuha ang isang target na pangalan bilang isang argumento at sinusuri sa true kung ang target ay
tinukoy bilang bahagi ng bmake's command line o idineklara ang default na target
(alinman sa tahasan o tahasan, tingnan .PANGUNAHING) bago ang linyang naglalaman ng
may kondisyon.
walang laman Kumuha ng isang variable, na may mga posibleng modifier, at sinusuri sa true kung ang pagpapalawak
ng variable ay magreresulta sa isang walang laman na string.
Umiiral Kinukuha ang pangalan ng file bilang argumento at sinusuri sa true kung umiiral ang file. Ang
Hinahanap ang file sa path ng paghahanap ng system (tingnan .DAAN).
target Kinukuha ang isang target na pangalan bilang isang argumento at sinusuri sa true kung ang target ay naging
tinukoy.
utos
Kinukuha ang isang target na pangalan bilang isang argumento at sinusuri sa true kung ang target ay naging
tinukoy at may mga utos na nauugnay dito.
pagpapahayag maaari ding isang aritmetika o paghahambing ng string. Ginagawa ang pagpapalawak ng variable
sa magkabilang panig ng paghahambing, pagkatapos ay inihambing ang mga integral na halaga. Ang isang halaga ay
binibigyang-kahulugan bilang hexadecimal kung ito ay nauunahan ng 0x, kung hindi, ito ay decimal; octal na mga numero
ay hindi suportado. Ang mga karaniwang C relational operator ay suportado lahat. Kung pagkatapos
variable expansion, alinman sa kaliwa o kanang bahagi ng isang '=='o'!=' ang operator ay hindi isang
integral value, pagkatapos ay isasagawa ang paghahambing ng string sa pagitan ng mga pinalawak na variable. Kung hindi
Ang relational operator ay ibinigay, ipinapalagay na ang pinalawak na variable ay inihambing
laban sa 0 o isang walang laman na string sa kaso ng paghahambing ng string.
Kailan bmake ay sinusuri ang isa sa mga conditional expression na ito, at nakatagpo ito ng isang (white-
space separated) salitang hindi nito nakikilala, alinman sa "make" o "defined" expression ay
inilapat dito, depende sa anyo ng kondisyon. Kung ang form ay '.ifdef',
'.ifndef', o'.kung' ang "tinukoy" na expression ay inilapat. Katulad nito, kung ang form ay
'.ifmake'o'.ifnmake, ang' "make" expression ay inilapat.
Kung ang kondisyon ay nagsusuri ng totoo, ang pag-parse ng makefile ay magpapatuloy tulad ng dati. Kung ito
sinusuri sa false, nilaktawan ang mga sumusunod na linya. Sa parehong mga kaso ito ay nagpapatuloy hanggang sa a
'.iba'o'.tapusin kung' ay natagpuan.
Para sa mga loop ay karaniwang ginagamit upang maglapat ng isang hanay ng mga panuntunan sa isang listahan ng mga file. Ang syntax ng a
para sa loop ay:
.para sa nagbabago [nagbabago ...] in pagpapahayag
⟨make-rules⟩
.endfor
Pagkatapos ng para sa pagpapahayag ay sinusuri, ito ay nahahati sa mga salita. Sa bawat pag-ulit ng
loop, isang salita ang kinuha at itinalaga sa bawat isa nagbabago, sa pagkakasunud-sunod, at ang mga ito mga variable ay
ipinalit sa make-rules sa loob ng katawan ng for loop. Ang bilang ng mga salita ay dapat
lumabas kahit na; ibig sabihin, kung mayroong tatlong mga variable ng pag-ulit, ang bilang ng mga salita na ibinigay
dapat ay isang multiple ng tatlo.
KOMENTARYO
Ang mga komento ay nagsisimula sa isang hash ('#') na character, kahit saan ngunit sa isang shell command line, at
magpatuloy sa dulo ng isang hindi nakatakas na bagong linya.
ESPESYAL SOURCES (ATTRIBUTES)
.EXEC Ang target ay hindi napapanahon, ngunit palaging magsagawa ng mga utos.
.HUWAG PANSININ Huwag pansinin ang anumang mga error mula sa mga utos na nauugnay sa target na ito, na para bang
naunahan silang lahat ng gitling ('-').
.GINAWA Markahan ang lahat ng pinagmumulan ng target na ito bilang up-to-date.
.GUMAWA Isagawa ang mga utos na nauugnay sa target na ito kahit na ang -n or -t mga pagpipilian ay
tinukoy. Karaniwang ginagamit upang markahan ang recursive bmakes.
.META Gumawa ng meta file para sa target, kahit na naka-flag ito bilang .PHONY, .GUMAWA, O
.ESPESYAL. Paggamit kasabay ng .GUMAWA ay ang pinaka-malamang na kaso. sa "meta"
mode, ang target ay hindi napapanahon kung nawawala ang meta file.
.NOMETA Huwag gumawa ng meta file para sa target. Ang mga meta file ay hindi rin ginawa para sa
.PHONY, .GUMAWA, O .ESPESYAL Mga target.
.NOMETA_CMP
Huwag pansinin ang mga pagkakaiba sa mga command kapag nagpapasya kung ang target ay luma na. Ito ay
kapaki-pakinabang kung ang utos ay naglalaman ng isang halaga na palaging nagbabago. Kung ang bilang ng
nagbabago ang mga utos, gayunpaman, hindi pa rin napapanahon ang target. Ang parehong epekto
nalalapat sa anumang command line na gumagamit ng variable .OODATE, na maaaring gamitin para sa
ang layuning iyon kahit na hindi kinakailangan o ninanais:
laktawan-compare-for-some:
@echo ito ay ikukumpara
@echo hindi ito magiging ${.OODATE:M.NOMETA_CMP}
@echo ihahambing din ito
Ang :M pinipigilan ng pattern ang anumang pagpapalawak ng hindi gustong variable.
.NOPATH Huwag hanapin ang target sa mga direktoryo na tinukoy ni .DAAN.
.NOTMAIN Karaniwan bmake pinipili ang unang target na nakatagpo nito bilang default na target
binuo kung walang target na tinukoy. Pinipigilan ng source na ito na maging ang target na ito
Napili.
.OPSYONAL
Kung ang isang target ay minarkahan ng katangiang ito at bmake hindi malaman kung paano lumikha
ito, hindi nito papansinin ang katotohanang ito at ipagpalagay na ang file ay hindi kailangan o umiiral na.
.PHONY Ang target ay hindi tumutugma sa isang aktwal na file; ito ay palaging itinuturing na
luma na, at hindi malilikha gamit ang -t opsyon. Suffix-transformation
hindi inilalapat ang mga patakaran .PHONY Mga target.
.MAHALAGA
Kailan bmake ay naaantala, karaniwang inaalis nito ang anumang bahagyang ginawang mga target. Ito
Pinipigilan ng pinagmulan ang pag-alis ng target.
.RECURSIVE
kasingkahulugan ng .GUMAWA.
.TAHIMIK Huwag i-echo ang alinman sa mga utos na nauugnay sa target na ito, na parang sila mismo
lahat ay naunahan ng isang at sign ('@').
.GAMIT Lumiko ang target sa bmakebersyon ng isang macro. Kapag ang target ay ginamit bilang a
source para sa isa pang target, ang ibang target ay nakakakuha ng mga command, source, at
mga katangian (maliban sa .GAMIT) ng pinagmulan. Kung ang target ay mayroon nang mga utos,
ang .GAMIT ang mga utos ng target ay nakadugtong sa kanila.
.GAMIT BAGO
Eksakto tulad ng .GAMIT, ngunit ihanda ang .GAMIT BAGO target na utos sa target.
.WAIT If .WAIT lilitaw sa isang linya ng dependency, ang mga mapagkukunan na nauuna dito ay ginawa bago
ang mga mapagkukunan na nagtagumpay dito sa linya. Dahil ang mga dependent ng mga file ay hindi
na ginawa hanggang sa ang file mismo ay maaaring gawin, ito rin ang humihinto sa pagiging mga umaasa
binuo maliban kung kailangan ang mga ito para sa isa pang sangay ng dependency tree. Kaya ibinigay:
x: a .HINTAY b
echo x
a:
echo a
b: b1
umalingawngaw b
b1:
umalingawngaw b1
ang output ay palaging 'a', 'b1', 'b', 'x'.
Ang pag-uutos na ipinataw ni .WAIT ay may kaugnayan lamang para sa mga parallel na gawa.
ESPESYAL MGA TARGET
Ang mga espesyal na target ay maaaring hindi kasama sa iba pang mga target, ibig sabihin, sila lang ang target
tinukoy.
.SIMULA Ang anumang command line na naka-attach sa target na ito ay ipapatupad bago ang anumang bagay
tapos na.
.DEFAULT
Ito ay uri ng a .GAMIT panuntunan para sa anumang target (na ginamit lamang bilang pinagmulan) na
bmake hindi makaisip ng ibang paraan para makalikha. Shell script lang ang ginagamit.
Ang .IMPSRC variable ng isang target na namamana .DEFAULTAng mga utos ni ay nakatakda sa
sariling pangalan ng target.
. END Ang anumang mga command line na naka-attach sa target na ito ay isinasagawa pagkatapos ng lahat ng iba pa
tapos na.
.ERROR Ang anumang command line na naka-attach sa target na ito ay isasagawa kapag nabigo ang isa pang target.
Ang .ERROR_TARGET variable ay nakatakda sa target na nabigo. Tingnan din
MAKE_PRINT_VAR_ON_ERROR.
.HUWAG PANSININ Markahan ang bawat source ng .HUWAG PANSININ katangian. Kung walang tinukoy na mga mapagkukunan,
ito ay katumbas ng pagtukoy sa -i pagpipilian.
.MAGABALA
If bmake ay nagambala, ang mga utos para sa target na ito ay isasagawa.
.PANGUNAHING Kung walang target na tinukoy kung kailan bmake ay hinihingi, ang target na ito ay itatayo.
.MAKEFLAGS
Ang target na ito ay nagbibigay ng paraan upang tukuyin ang mga flag para sa bmake kapag ginamit ang makefile.
Ang mga flag ay parang nai-type sa shell, bagaman ang -f ang opsyon ay walang epekto.
.NOPATH Ilapat ang .NOPATH katangian sa anumang tinukoy na mapagkukunan.
.HINDI PARALLEL
Huwag paganahin ang parallel mode.
.NO_PARALLEL
kasingkahulugan ng .HINDI PARALLEL, para sa pagiging tugma sa iba pang mga variant ng pmake.
.OBJDIR Ang pinagmulan ay isang bagong halaga para sa '.OBJDIR'. Kung mayroon man, bmake habilin chdir(2) dito
at i-update ang halaga ng '.OBJDIR'.
.ORDER Ang mga pinangalanang target ay ginawa sa pagkakasunud-sunod. Ang pag-order na ito ay hindi nagdaragdag ng mga target sa
listahan ng mga target na gagawin. Dahil ang mga umaasa sa isang target ay hindi nabubuo
hanggang sa ang target mismo ay mabuo, maliban kung ang 'a' ay binuo ng isa pang bahagi ng
dependency graph, ang sumusunod ay isang dependency loop:
.ORDER: ba
b: sa
Ang pag-uutos na ipinataw ni .ORDER ay may kaugnayan lamang para sa mga parallel na gawa.
.DAAN Ang mga mapagkukunan ay mga direktoryo na hahanapin para sa mga file na hindi matatagpuan sa
kasalukuyang direktoryo. Kung walang tinukoy na mga mapagkukunan, anumang naunang tinukoy
ang mga direktoryo ay tinanggal. Kung ang pinagmulan ay ang espesyal .DOTLAST target, pagkatapos ay ang
ang kasalukuyang gumaganang direktoryo ay huling hinanap.
.DAAN.suffix
katulad .DAAN ngunit nalalapat lamang sa mga file na may partikular na suffix. Ang suffix ay dapat
ay dati nang idineklara na may .SUFFIXES.
.PHONY Ilapat ang .PHONY katangian sa anumang tinukoy na mapagkukunan.
.MAHALAGA
Ilapat ang .MAHALAGA katangian sa anumang tinukoy na mapagkukunan. Kung walang source
tinukoy, ang .MAHALAGA inilapat ang attribute sa bawat target sa file.
.SHELL Itinatakda ang shell na bmake ay gagamitin upang magsagawa ng mga utos. Ang mga mapagkukunan ay isang set ng
field=value pares.
pangalan Ito ang minimal na detalye, na ginagamit upang pumili ng isa sa builtin
mga spec ng shell; sh, ksh, at csh.
landas Tinutukoy ang landas patungo sa shell.
hasErrCtl Isinasaad kung sinusuportahan ng shell ang paglabas kapag nagkamali.
tsek Ang utos upang i-on ang pagsuri ng error.
huwag pansinin Ang utos na huwag paganahin ang pagsuri ng error.
miss Ang utos na i-on ang echoing ng mga utos na naisakatuparan.
tahimik Ang utos na i-off ang echoing ng mga utos na naisakatuparan.
filter Ang output na i-filter pagkatapos ilabas ang tahimik utos. Ito ay karaniwang
kapareho ng tahimik.
errFlag Ang bandila upang ipasa ang shell upang paganahin ang pagsuri ng error.
echoFlag Ang bandila upang ipasa ang shell upang paganahin ang command echoing.
bagong linya Ang literal na string upang ipasa ang shell na nagreresulta sa isang bagong linya
character kapag ginamit sa labas ng anumang sumipi na mga character.
Halimbawa:
.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \
check="set -e" ignore="set +e" \
echo="set -v" quiet="set +v" filter="set +v" \
echoFlag=v errFlag=e newline="'\n'"
.TAHIMIK Ilapat ang .TAHIMIK katangian sa anumang tinukoy na mapagkukunan. Kung walang tinukoy na mga mapagkukunan,
ang .TAHIMIK ang attribute ay inilalapat sa bawat command sa file.
.STALE Ang target na ito ay tatakbo kapag ang isang dependency file ay naglalaman ng mga lipas na entry, na mayroong .ALLSRC
itakda sa pangalan ng dependency file na iyon.
.SUFFIXES
Ang bawat pinagmulan ay tumutukoy ng isang suffix sa bmake. Kung walang tinukoy na mga mapagkukunan, anuman
ang mga dating tinukoy na suffix ay tinanggal. Pinapayagan nito ang paglikha ng suffix-
mga tuntunin sa pagbabago.
Halimbawa:
.MGA KASAPIT: .o
.co:
cc -o ${.TARGET} -c ${.IMPSRC}
Kapaligiran
bmake gumagamit ng mga sumusunod na variable ng kapaligiran, kung mayroon sila: MACHINE, MACHINE_ARCH,
MACHINE_MULTIARCH, MAKE, MAKEFLAGS, MAKEOBJDIR, MAKEOBJDIRPREFIX, MAKESYSPATH, PWD, at
TMPDIR.
Ang MAKEOBJDIRPREFIX at MAKEOBJDIR ay maaari lamang itakda sa kapaligiran o sa command line upang
bmake at hindi bilang mga variable ng makefile; tingnan ang paglalarawan ng '.OBJDIR' para sa higit pang mga detalye.
Gumamit ng pmake online gamit ang mga serbisyo ng onworks.net