Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi öykünücüsü veya MAC OS çevrimiçi öykünücüsü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen mkplan9 komutudur.
Program:
ADI
mk - ilgili dosyaları koru (yap)
SİNOPSİS
mk [ -f mk dosyası ] ... [ seçenek Kendi ID’n ile mağazalarını oluştur ] [ hedef Kendi ID’n ile mağazalarını oluştur ]
AÇIKLAMA
Mk belirtilen bağımlılık kurallarını kullanır mk dosyası güncellemeyi kontrol etmek için (genellikle
derleme) hedefler (genellikle dosyalar) bağlı oldukları kaynak dosyalardan. NS
mk dosyası (varsayılan bir kural dosyaları ve diğerlerini tanımlayan her hedef için
bağlı olduğu hedefler ve sh(1) komut dosyası, bir yemek tarifi, hedefi güncellemek için. NS
komut dosyası, hedef yoksa veya dosyalardan herhangi birinden daha eskiyse çalıştırılır.
bağlıdır. mk dosyası ayrıca içerebilir meta-kurallar örtük güncelleme için eylemleri tanımlayan
hedefler. Eğer hayırsa hedef belirtildiğinde, ilk kuralın (meta kuralın değil) hedefi
mk dosyası Güncellendi.
ortam değişkeni $NPROC aynı anda kaç hedefin güncellenebileceğini belirler;
Bazı işletim sistemleri, örneğin Plan 9, set $NPROC üzerindeki CPU sayısına otomatik olarak
mevcut makine.
Seçenekler:
-a Tüm hedeflerin güncel olmadığını varsayın. Böylece her şey güncellenir.
-d[örneğin] Hata ayıklama çıktısı üret (p ayrıştırma içindir, g grafik oluşturma için, e için
çalıştırma).
-e Her hedefin neden yapıldığını açıklayın.
-i Eksik ara hedefleri yapılmaya zorlayın.
-k Hatalar karşısında mümkün olduğunca çok iş yapın.
-n Hedefleri güncellemek için gereken komutları yazdırın, ancak çalıştırmayın.
-s Komut satırı argümanlarını paralel değil, sırayla yapın.
-t Herhangi bir tarif yürütmeden dosya hedeflerine dokunun (değiştirilme tarihini güncelleyin).
-whedef1,hedef2,...
Her biri için değişiklik zamanını farz edin hedef şimdiki zaman; birlikte yararlı
ile -n değiştirilerek hangi güncellemelerin tetikleneceğini öğrenmek için hedefler.
The mk dosyası
A mk dosyası oluşmaktadır ödevler ("Çevre" başlığı altında açıklanmıştır) ve kurallar. Kural
içeren hedefler ve kuyruk. Hedef, değişmez bir dizedir ve normalde bir dosya adıdır.
Kuyruk sıfır veya daha fazlasını içeriyor önkoşullar ve isteğe bağlı yemek tarifibir kabuk
senaryo. Tarifin her satırı beyaz boşlukla başlamalıdır. Bir kural formu alır
hedef: önkoşul1 önkoşul2
yemek tarifi kullanma önkoşul1, önkoşul2 için inşa etmek hedef
Tarif yürütüldüğünde, her satırdaki ilk karakter atlanır.
Hedef satırdaki iki nokta üst üste işaretinden sonra bir kural belirtilebilir öznitelikleri, Aşağıda açıklanan.
A meta-kural formun bir hedefi var A%B nerede A ve B (muhtemelen boş) dizelerdir. A
meta-kural, adı eşleşen herhangi bir potansiyel hedef için bir kural görevi görür A%B ile % yerine
adı verilen rastgele bir dize ile kök. Bir meta kuralı yorumlarken, kök
tüm oluşumlar için ikame % önkoşul isimlerde. Bir meta tarifinde
kural, ortam değişkeni $gövde tarafından eşleşen dizeyi içerir %. Örneğin, bir
kullanarak bir C programını derlemek için meta-kural 9c(1) olabilir:
%: %.C
9c -c $kök.c
9l -o $kök $kök.o
Meta-kurallar bir ve işareti içerebilir & yüzde işareti yerine %. bir % bir maksimumla eşleşir
herhangi bir karakterin uzunluk dizesi; bir & herhangi bir karakterin maksimum uzunluktaki dizesiyle eşleşir
nokta veya eğik çizgi hariç.
Metni mk dosyası aşağıdaki gibi işlenir. ile başlayan satırlar < ardından bir dosya
name, adlandırılmış dosyanın içeriğiyle değiştirilir. ile başlayan satırlar <| ardından
bir dosya adı, adlandırılmış dosyanın yürütülmesinin çıktısı ile değiştirilir. Boş satırlar
ve alıntı yapılmayan yorumlar # sonraki satırsonu karakterleri silinir.
Karakter dizisi ters eğik çizgi-yeni satır silinir, bu nedenle uzun satırlar mk dosyası olabilir
katlanmış. Reçetesiz satırlar yerine yazılarak işlenir. `{komuta} çıktısı
komuta tarafından çalıştırıldığında sh. Değişkenlere yapılan başvurular, değişkenlerin değerleriyle değiştirilir.
Özel karakterler tek tırnak kullanılarak alıntılanabilir '' içinde olduğu gibi sh(1).
Ödevler ve kurallar, ilk alıntılanmamış oluşumu ile ayırt edilir. : (kural) veya =
(atama).
Daha sonraki bir kural, aşağıdaki koşullar altında mevcut bir kuralı değiştirebilir veya geçersiz kılabilir:
- Kuralların hedefleri tam olarak eşleşiyorsa ve bir kural yalnızca bir ön koşul içeriyorsa
yan tümce ve reçete yok ise, yan tümce diğer kuralın önkoşullarına eklenir.
Hedeflerden biri veya her ikisi sanalsa, tarif her zaman yürütülür.
- Kuralların hedefleri tam olarak uyuyorsa ve ön koşullar uymuyorsa ve
her iki kural da yemek tarifleri içerir, mk bir ``belirsiz tarif'' hatası bildiriyor.
- Her iki kuralın hedefi ve önkoşulları tam olarak eşleşirse, ikinci kural
ilkini geçersiz kılar.
çevre
Kurallar, kabuk ortam değişkenlerini kullanabilir. Formun yasal referansı $OBJ or
${isim} olduğu gibi genişletilir sh(1). Formun bir referansı ${isim:A%B=CD}, Burada A, B, C,
D (muhtemelen boş) dizelerdir, genişletilerek oluşturulan değere sahiptir $ isim ve ikame C
için A ve D için B içindeki her kelimede $ isim desenle eşleşen A%B.
Değişkenler formun atamaları ile ayarlanabilir
var=[özellik=]değer
boşluklar değer kelimelere böl. Bu tür değişkenler ortama aktarılır
yürütüldükçe tariflerin U, tek yasal nitelik özellik, bulunur. NS
bir değişkenin başlangıç değeri (artan öncelik sırasına göre) varsayılan değerden alınır.
aşağıdaki değerler, mk'ler çevre, mk dosyalarıve herhangi bir komut satırı ataması olarak
argüman mk. Bir değişken atama argümanı ilkini geçersiz kılar (ancak herhangi birini değil
sonraki) bu değişkene atama.
Değişken MKFLAG'LAR tüm seçenek argümanlarını içerir (veya ile başlayan argümanlar)
içeren ve MKARGLAR çağrıdaki tüm hedefleri içerir mk.
Değişken MKSHELL kabuk komut satırını içerir mk tarifleri çalıştırmak için kullanır. eğer ilk
komutun kelimesi şurada biter: rc or rcsh, mk kullanım rc(1)'in alıntı kuralları; aksi halde kullanır
sh(1)'ler. NS MKSHELL mkfile okunduğunda değil, okunduğunda değişkene danışılır
yürütülür, böylece tek bir mkfile içinde farklı kabuklar kullanılabilir:
MKSHELL=$PLAN9/bin/rc
kullanım-rc:V:
for(abc'de i) echo $i
MKSHELL=sh
kullanım-sh:V:
abc'de i için; echo $i yapın; tamamlamak
Mkfiles dahil < or <| (qv) kendi özel kopyasını görmek MKSHELL, ki her zaman
ayarlanmaya başlar sh .
Dinamik bilgiler, formun bir satırı kullanılarak mkfile'ye dahil edilebilir.
<|komuta args
Bu komutu çalıştırır komuta verilen argümanlarla args ve standart çıktısını borular
için mk mkfile'ın bir parçası olarak dahil edilecek. Örneğin, Inferno çekirdekleri bunu kullanır.
argüman olarak bir awk komut dosyası ve bir yapılandırma dosyası ile bir kabuk komutu çalıştırma tekniği
sırayla awk dosyayı işlemek ve bir dizi değişken ve bunların çıktısını almak için komut dosyası
değerleri.
infaz
Yürütme sırasında, mk hangi hedeflerin güncellenmesi gerektiğini ve hangi sırayla oluşturulacağını belirler.
the isimleri komut satırında belirtilir. Daha sonra ilgili tarifleri çalıştırır.
Önkoşulları yoksa veya tüm önkoşulları varsa bir hedef güncel olarak kabul edilir.
günceldir ve tüm önkoşullarından daha yenidir. Bir kez bir hedefin tarifi
yürütüldüğünde, hedef güncel olarak kabul edilir.
Bir hedefin güncel olup olmadığını belirlemek için kullanılan tarih damgası, aşağıdakiler için farklı şekilde hesaplanır:
farklı hedef türleri. bir hedef ise sanal (bir kuralın hedefi V
özniteliği), tarih damgası başlangıçta sıfırdır; hedef güncellendiğinde tarih damgası
önkoşullarının en son tarih damgasına ayarlanır. Aksi takdirde, bir hedef yoksa
dosya olarak mevcutsa, tarih damgası ön koşullarının en son tarih damgasına ayarlanmıştır,
veya önkoşul yoksa sıfır. Aksi takdirde, hedef bir dosyanın adıdır ve
hedefin tarih damgası her zaman o dosyanın değişiklik tarihidir. Tarih damgası hesaplanır
bir kuralın uygulanmasında hedefe ihtiyaç duyulduğunda; statik bir değer değildir.
Önkoşulları olan ve kendileri önkoşul olan mevcut olmayan hedefler ele alınır
özel olarak. Böyle bir hedef t en son ön koşulunun tarih damgası verilir ve eğer
bu, sahip olan tüm hedeflere neden olur t güncel olmak için bir ön koşul olarak, t is
güncel sayılır. Aksi halde, t normal şekilde yapılır. NS -i bayrak geçersiz kılar
bu özel muamele.
Dosyalar, önceki kısıtlamalara uyan herhangi bir sırayla yapılabilir.
Tarif, komuta standart girdi olarak sağlanarak bir tarif yürütülür. / Bin / sh.
(Bundan farklı olarak yapmak, mk her birini çalıştırmak yerine tüm tarifi kabuğa besler
tarifin satırı ayrı ayrı.) Ortam, aşağıdaki değişkenler tarafından artırılır:
$hedef bu kuralın tüm hedefleri.
$yeniprereq bu kuralın yürütülmesine neden olan ön koşullar.
$yeni üye Bu kuralın uygulanmasına neden olan bir kümenin üyeleri olan önkoşullar
uygulamak. Bir kuralın önkoşulları bir kümenin üyeleri olduğunda,
$yeniprereq toplu ve güncel olmayan üyelerin adını içerirken,
$yeni üye sadece üyelerin isimlerini içerir.
$nproc bu tarifin işlem yuvası. 0≤'yi karşılar$nproc<$NPROC.
$pid için işlem kimliği mk tarifi yürütmek.
$ önkoşul Bu kural için tüm ön koşullar.
$gövde eğer bu bir meta-kural ise, $gövde eşleşen dize % or &. Aksi takdirde,
boş. Normal ifade meta kuralları için (aşağıya bakın), değişkenler
karşılık gelen alt ifadelere ayarlanır.
$hedef Bu kuralın yeniden düzenlenmesi gereken hedefleri.
Bu değişkenler yalnızca bir tarifin yürütülmesi sırasında kullanılabilir, değerlendirme sırasında değil
the mk dosyası.
Kurala sahip olmadıkça Q özniteliği, reçete ile yürütülmeden önce yazdırılır
tanınabilir ortam değişkenleri genişletildi. Hata durumu nedenini döndüren komutlar mk için
sonlandırmak.
Tarifler ve alıntı rc atamalar gibi yerlerdeki komutlar, bir kopyasında yürütülür. mk'ler
Çevre; ortam değişkenlerinde yaptıkları değişiklikler, mk.
Bir kuralda değişken değiştirme, kural okunduğunda yapılır; değişken ikame
tarif yürütüldüğünde tarif yapılır. Örneğin:
bar=ac
foo: $ bar
$CC -o foo $bar
çubuk=bc
derleyecek bc içine foo, Eğer AC daha yeni foo.
Agregalar
formun isimleri a(b) üyeye bakın b agreganın a. Şu anda, tek
desteklenen agregalar 9ar (görmek 9c(1)) arşivler.
Özellikler
Hedefi ön koşullardan ayıran iki nokta üst üste işaretinin hemen ardından
öznitelikleri ve başka bir kolon. Nitelikler şunlardır:
D Tarif null olmayan bir durumla çıkarsa hedef silinir.
E Tarifte hata varsa uygulamaya devam edin.
N Tarif yoksa, hedefin zamanı güncellenir.
n Kural, sanal bir kuralın hedefi olamayacak bir meta kuraldır. sadece dosyalar
deseni hedefle eşleştirin.
P sonra karakterler P sona erene kadar : program adı olarak alınır. Bilişim Teknoloji
olarak çağrılacak sh -c disiplin görevlisi 'arg1' 'arg2' ve eğer sıfır çıkış durumu döndürmelidir
ve yalnızca arg1 arg2'ye göre güncelse. Tarih damgaları hala
normal bir şekilde yayılır.
Q Tarif, uygulamadan önce yazdırılmaz.
R Kural, normal ifadeler kullanan bir meta kuraldır. Kuralda, % özel bir özelliği yok
anlam. Hedef, içinde tanımlandığı gibi normal bir ifade olarak yorumlanır.
regexp(7). Ön koşullar, formdaki alt ifadelere referanslar içerebilir. n,
ikame komutunda olduğu gibi susuzluk(1).
U Reçete yapılmasa bile hedefler güncellenmiş olarak kabul edilir.
V Bu kuralın hedefleri sanal olarak işaretlenir. dosyalarından farklıdırlar.
aynı isim.
ÖRNEKLER
Bir programı derlemek için basit bir mkfile:
</$objtype/mkfile
prog: a.$O b.$O c.$O
$LD $LDFLAGS -o $hedef $önkoşul
%.$O: %.c
$CC $CFLAGS $stem.c
mkfile'deki bayrak ayarlarını geçersiz kıl:
% mk hedefi 'CFLAGS=-S -w'
Bir kitaplığı koruyun:
libc.a(%.$O):N: %.$O
libc.a: libc.a(mutlak.$O) libc.a(erişim.$O) libc.a(alarm.$O) ...
ar r libc.a $yeni üye
Bir ana listeden ad türetmek için dize ifadesi değişkenleri:
İSİMLER=alloc arc bquote yerleşikleri ana eşleşmeyi genişlet mk var word
OBJ=${NAMES:%=%.$O}
Normal ifade meta kuralları:
([^/]*)/(.*)\.$O:R: \1/\2.c
cd $kök1; $CC $CFLAGS $stem2.c
başa çıkmanın doğru bir yolu yacc(1) gramer. Dosya lex.c dosyayı içerir x.tab.h
ziyade y.tab.h sadece değişiklik zamanını değil, içerikteki değişiklikleri yansıtmak için.
lex.$O: x.tab.h
x.tab.h: y.tab.h
cmp -s x.tab.h y.tab.h || cp y.tab.h x.tab.h
y.tab.c y.tab.h: gram.y
$YACC -d gram.y
Yukarıdaki örnek aynı zamanda P için öznitelik x.tab.h kural:
x.tab.h:Pcmp -s: y.tab.h
cp y.tab.h x.tab.h
KAYNAK
/src/cmd/mk
onworks.net hizmetlerini kullanarak mkplan9'u çevrimiçi kullanın