Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen makepp_faq komutudur.
Program:
ADI
makepp_faq -- makepp hakkında sık sorulan sorular
TANIM
Burada kurulum talimatlarını ve açık olmayan bazı noktaları bulabilirsiniz.
belgelerin geri kalanı. Bu, engelleri gösterirken, nasıl yazılacağı soruları
yemek kitabında bulabilirsiniz.
Başlarken başladı
Nerede için indirmek?
Makepp, SourceForge'da barındırılmaktadır ve kaynak kodu tarball olarak veya
Debian için kurulum paketi . Deb tabanlı Linux'lar veya . Rpm tabanlı Linux'lar
http://sourceforge.net/projects/makepp/files/
Tonlarca Perl yazılımı gibi makepp de CPAN'dan şuraya tıklanarak indirilebilir:
İndirme bağlantısı http://search.cpan.org/dist/makepp/
Makepp, Debian GNU/Linux'un kararsız ve test edici bir parçasıdır. Bu, yükleyebileceğiniz anlamına gelir
doğrudan "apt-get install makepp" aracılığıyla veya tercih ettiğiniz paket aracından seçerek
sinaptik gibi.
Makepp, archlinux'un ve Gentoo Linux'un bir parçasıdır. Dağıtıma özgü son eklerin şunun gibi olduğunu unutmayın:
2.0-1 veya 2.0-r1, sürüm adayı 1 değil, son yayınlanan sürüm 2.0'dır.
Yapabilmek I denemek it olmadan yükleme?
Evet, makepp'i kendi makefile dosyalarınızda denemek istiyorsanız, dizini istediğiniz yere koyun.
yolunuza açın veya mutlak veya
makepp'e göreli yol:
perl /nerede/sen/paketlenmemiş/it/makepp
Ne kadar için seçmek perl versiyon?
Sisteminizde bir yerde Perl 5.8 veya daha yenisi olmalıdır. Varsayılan olarak tümü kaldırıldı
komut dosyaları, yolunuzdaki "Perl" i kullanır. Ancak bunları açık bir örnekle çalıştırabilirsiniz.
perl'den. Test çalıştırıcısı ve kurulum, her şeyi aynı örnekle çalıştıracaktır.
/path/to/perl /nerede/siz/unpacked/it/makepp
Bazı betiklerin hangi "Perl" ile çalıştırıldığını tam olarak tanımaması durumunda, şunları yapabilirsiniz:
"PERL" değişkeni aracılığıyla aynı Perl örneğine giden yolu söyleyerek ona yardım edin:
PERL=/path/to/Perl /path/to/Perl /where/you/unpacked/it/makepp
Bu aynı zamanda yolunuzda aranacak bir örnek olabilir, eğer bir
dizin ayırıcı:
PERL=perl5.16.2 perl5.16.2 /nerede/siz/paketlenmemiş/it/makepp
Ne kadar için yüklemek?
Aynı sonuca yol açan yüklemenin iki yolu vardır:
yapılandır (takma ad config.pl)
Bu, geleneksel tarzda kuruluma izin verir:
./configure && make test && make install
Bu ikisi arasındaki tek fark, "configure" ifadesinin bir Perl betiği olmamasıdır.
"Perl configuration" diyemezsiniz, oysa yukarıdaki tüm değişkenleri "perl" gibi kullanabilirsiniz.
config.pl". Geçerli seçenekler şunlardır:
-b, --bindir=/path/to/kurulum/bin
İkili dosyaların nereye gittiği (varsayılan: önek/çöp Kutusu). Makepp'in ikili dosyaları sadece Perl'dir
komut dosyaları, böylece mimariden bağımsızdırlar. Bu seçeneği verirseniz, ancak hayır
"--prefix", soyar /çöp Kutusu bir sonuç çıkarmak önek diğer varsayılan değerler için.
-d, --veri dizini=/yol/to/kurulum/paylaş/makepp
makepp'in kitaplık dosyalarının nereye kurulacağı (varsayılan: önek/paylaş/makepp).
-f, --findbin=göreceli/yol/to/datadir/from/bindir
Yürütülebilir dosyalara göre kitaplıklar nerede bulunur veya bulunacak 'yok' (varsayılan)
onlar içinde veri dizini.
-h, --htmldir=/yol/to/kurulum/paylaşım/html
HTML belgelerinin gittiği yer (varsayılan: önek/doc/makepp ise önek/ doc
var, başka veri dizini/html) veya yüklenmesini istemiyorsanız 'hiçbiri'.
-m, --mandir=/yol/insana/insan
Kılavuz sayfalarının nerede olması gerektiği (varsayılan: önek/share/man varsa, yoksa
önek/man) veya yüklenmesini istemiyorsanız 'hiçbiri'.
--makedosyası=/yol/to/Makefile
Makefile yazabileceğiniz konumu belirtin (varsayılan: .). diğerinden farklı olarak
Aşağıdaki kurulum adımı için hatırlanan seçenekler, bu dosya oluşturulur
hemen.
-p, --ön ek=/yol/için/kurulum
Her şeyi yüklemek istediğiniz konumu belirtin (varsayılan: / Yerel / usr). Tüm
diğer yollar varsayılan olarak buna göredir.
-V
--versiyon
Sürüm numarasını yazdırın.
Kendi paketlerinizi paketlemek için bir destdir'e bir mockup kurulumu yapmak istiyorsanız
dağıtım, son komuta fazladan bir parametre verebilirsiniz:
DESTDIR=/temporary/destdir kurulumu yap
kurulum.pl
Bu, gerçek yüklemeyi gerçekleştiren arka uçtur. Doğrudan arayabilirsiniz:
./install.pl bindir datadir mandir htmldir findbin hedefdir
Parametreler isteğe bağlıdır ve önceki bölümdeki seçeneklere karşılık gelir.
Sonuncusu hariç, tedarik etmedikleriniz istenir.
normalde gerekli.
Makefile.PL
alışılmış dosya Makefile.PL şu anda sadece teknik nedenlerle mevcuttur. Bilişim Teknoloji
irade değil yüklemenize yardımcı olur. Bu nedenle, ne yazık ki, "cpanm" gibi araçları kullanamazsınız.
tek seferde yükleyin.
Bazı sistemlerde hangi "Perl"i ararsanız arayın, bazı kesinliklere sembolik bir bağlantı olabilir.
"perl5.mn" sürümü. Bu durumda Perl yalnızca bunu görür ve bu nedenle onu kullanmak için kullanır.
karşı yükleyin. Bunu istemiyorsanız, yukarıda açıklandığı gibi "PERL" değişkenini kullanın. Eğer
ikinci değişkenle, yani yalnızca yürütülebilir dosyanın adını eğik çizgi olmadan yüklersiniz,
yüklü komut dosyaları her zaman " ile onu arayacaktır./usr/bin/ortam". Bu onları
daha fazla esneklik için başlamak için biraz daha yavaş.
Neden Şimdi yok Kurulum söylemek izin reddedildi mi?
Gibi bir sistem dizinine yüklemek istiyorsanız / usr, / Yerel / usr or / opt, sadece
kurulumu kullanıcı kökü olarak çalıştırırsanız bunu yapın. Birçok Unice'de bir komutu şu şekilde çalıştırabilirsiniz:
root, başına "sudo" ekleyerek ve sisteme giren sisteme bağlı olarak
parola veya istendiği gibi sizinki.
Bu, yalnızca "configure" veya "config.pl" hazırlık adımı için gerekli değildir.
yazar Makefile geçerli dizinde.
İnşa etmek Sorular
Ne vardır önemsiz hedefler?
Makepp, her dosyanın bağımlılıklarını hatırlar. Bunlardan herhangi birinin yeniden inşa edilmesi gerekiyorsa, bu
yeniden taramadan önce yapılacaktır. Ancak derleme başarısız olursa, tarama başarılı olur, çünkü
dosyaya artık ihtiyaç bile yok, o zaman sonunda başarısızlık şu şekilde rapor edilecek
önemsiz. (Derleme denenmemeli, bunun yerine yeniden taramanın bunları yapmasına izin verilmelidir.
gerekli bulduğunu oluşturur, ancak bu farklı bir yerde olur, bu yüzden bu
zor.)
Neden Şimdi yok it koşmak Re-Tweet kural 3 zamanlar?
GNU make'nin makepp stili çoklu hedef kuralı yoktur. Bunun yerine bunu bir kısayol olarak yorumlar.
üç ayrı kural için:
ABC:
yankı $@
abc'ye dokunun
Ancak, bir dosyanın neden orada olduğunu kontrol etmez. Bir dosya varsa (ve herhangi bir dosyadan daha yeniyse)
bağımlılıklar) mutludur. Üç dosyadan hangisi önce oluşturulursa,
diğer ikisi, yani bu biraz çok hedefli bir kural gibi davranır - ancak yarışa neden olabilir
Paralel yapılarda koşullar.
Benzer bir kural olabilirdi:
ABC:
$@'a dokunun
Gmake gerçekten de bunu gerekli dosya başına bir kez çalıştırır. Komutun ne yaptığını bilmeden
(bazı dosyaları dahili olarak oluşturan bir komut dosyası olabilir), iki durum kolayca olamaz
makepp tarafından ayrı söylendi.
Özel bir uyumluluk yedeği olarak, çok hedefli bir kural eylemi yalnızca eski
$@ stili ve ne yeni stil "$(output)" ne de "$(hedef)" ne de çoğul biçimleri
ayrı kurallar olarak ele alınır. Ancak bu, makepp'in yok saydığı için onu tekrar tekrar çalıştırmak anlamına gelir.
meta verisi olmayan rastgele görünen dosyalar.
Neden Şimdi yok it şikayet o a çevrimiçi kurslar düzenliyorlar. dosya is sahte?
Eşzamansız olarak çalışmaya devam eden bir komutunuz varsa, bir komutla geri döndükten sonra
Başarı dönüş kodu, makepp söz verilen dosyanın eksik olduğunu fark edecek ve şikayet edecektir. Bu
ayrıca tipik olarak yalnızca fiziksel olarak yazabilen bazı ağ dosya sistemlerinde de olabilir.
birkaç saniye sonra.
Böyle tatmin edici olmayan bir durumu kaldıramıyorsanız, makepp'ten özensiz olmasını isteyebilirsiniz.
"--gullible" seçeneği ile bu kontrol hakkında. Ama sonra bağlı olan bir sonraki komut
üretilen dosya yine de başarısız olabilir.
Neden Şimdi yok it Tekrar Oluştur Dosyaları boşu boşuna?
Bunu NFS'de gözlemledim, burada dosya özniteliği nedeniyle zaman damgasını önbelleğe alıyor
üretilen dosya henüz sahip olduğu dosya değildi. Bir sonraki çalıştırmada makepp şunu fark etti:
farkı ve dosyayı gereksiz yere değiştirilmiş olarak kabul etti. Bu bir mount seçeneğiyle çözüldü
"acregmin=0", özellikleri hemen görünür hale getirir.
Bu, depolarda da olabilir, örneğin depoda başka biri yerleşikse
"umask 066" ile veya başkalarının üretilen dosyayı okumasını engelleyen bir derleyici kullanarak.
Bu, depo veya yapı ağacınız ortak bir yolu paylaşıyorsa da gerçekleşir.
bazı bağımlılıklarla önek (örn. /opt/depo ve /opt/bir araç, bu durumda
makepp yolu bir kez göreli, bir kez de mutlak olarak hatırlayacak, değişmiş gibi görünecek
bağımlılıklar.
Mı the C kaynak dosya or the nesne dosya bağlı on başlıklar?
Bu sizin bakış açınıza bağlıdır. Bir başlıktaki bir prototip değişirse, programcı
kaynak kodunu uyarlamak için. Yani bu bakış açısından bir bağımlılık var.
Ancak yapı için bu tamamen alakasız. Burada çıktılar girdilere bağlıdır.
Bir başlık dosyası değişirse bu, nesne dosyasını etkileyebilir (örn.
programcının görmezden gelebileceği, ancak derleyicinin değil) varsayılan değerler). Yani makepp'ten
bakış açısı sadece üretilen nesne dosyası başlıklara bağlıdır, yani ne zaman yeniden oluşturulmalıdır?
bunlar değişir.
Diğer
Neden Şimdi yok makep seçici olarak belirlemek bağımlılıklar?
Bu kuralda makepp neden çıktı bağlıdır giriş1, ama değil giriş2?
çıktı:
zcat çıktı
zcat girdi2 >>çıktı
Tarama için üç seviye vardır. Birincisi, konuyu anlamaya çalışan sözlük yazarıdır.
Yürütmenin kabuk kısmı. Yani hangi komutlar çağrılır ve hangi G/Ç yönlendirmeleri
yer almak. Bu fark eder giriş1 ve çıktı (hedef olarak ilan edilmemiş olsa bile)
bu kural).
Bir sonraki adım, komut ayrıştırıcılarıdır. Makepp'in tipik derleme komutları için birkaç tane vardır.
Bunlar, komutun ne yapacağını anlamak için komut satırı seçeneklerini kontrol eder. İçinde
kütüphaneler ("cc -llib") gibi bağımlılıkları aldıkları süreç, yollar ("cc -Idir") içerir
ve giriş dosyaları. Bir "zcat" ayrıştırıcısının görevi, "-S"nin bir
bağımsız değişken, ancak seçenek olmayan diğer tüm sözcükler dosya adlarıdır (isteğe bağlı olarak .gz), Ve
bu "--" seçenekleri bitirir. Ne yazık ki böyle bir ayrıştırıcı yok, yüzlerce başka
emreder.
Bazı diller için üçüncü adım, aşağıdakileri içerenleri algılamak için giriş dosyalarının taranmasıdır.
daha fazla bağımlılık. Bu, bu örnek için geçerli değildir.
Ne kadar yapabilmek I ayıklamak makep?
Şüpheli bir ifadenin etrafına "$(print )" koyabilirsiniz. Bu değişmemiş olanı döndürür
ifade, bir yan etki olarak yazdırırken.
Geçerli dizinin makefile dosyasını (isterseniz "-C" den sonra çarpın)
makepp'in bunu nasıl gördüğünü görmek için "--dump-makefile=file" seçeneği.
Makepp, yaptığı her şeyin ve nedenlerinin bir günlüğünü yazar. Buna makepplog ile bakabilirsin,
mppl veya makeppgraph, mppg. Ortamı ayarlayarak daha ayrıntılı hale getirebilirsiniz.
"MAKEPP_DEBUG" değişkeni.
Makepp, bir sonraki çalıştırmada yeniden kullanılmak üzere bir dosya hakkında bildiği her şeyi kaydeder. Biraz almasına rağmen
makepp'in içindekileri anlama, makeppinfo, bir veya daha fazla mppi ile boşaltma
dosyalar, genellikle neyin yanlış olduğuna dair bir ipucu verir. "MAKEPP_DEBUG" ayrıca şunları sağlar:
"KURAL_KAYNAK".
Maceracı hissediyorsanız, cvs'den makepp kullanın. Bu, ek modülleri içerir:
makepp'in içindekileri daha iyi görüntülemek için "Perl -d"ye bağlanın.
Is it güvenli için kullanılır?
Evet, tam olarak makefile'lerinizin söylediklerini yapacaktır (birçok programcının zor bulduğu
Anlayın, çünkü kural tabanlı çıkarım çoğu programlama paradigmasından çok farklıdır).
Ve yok hayır, sahip olduğunuz makefile'lara güvenmiyorsanız, kesinlikle değil! Bir makefile komik
amacınızı değiştirmesi beklenen komutları çalıştırmak olan bir betik türü.
dosya sistemi. Makepp'in ne zarar vereceğini kontrol etmenin hiçbir yolu yok.
Daha da kötüsü, "--dry-run" (ki bu
kuralları çalıştırmaz, ancak diğer her şeyi değerlendirir). Bu gibi bir şey olabilir
bu:
bad_boy := $(kabuk rm *)
dış araçlar
Yapabilmek I kullanım cc -M or gcc -MM?
Kısa cevap evet. Uzun cevap, onların
son garip derleyici seçeneğinin bile etkisi ve bazı derleyicilerde gizli olan alt öğeler
makepp'in yalnızca oldukça yakın olduğu dahili dizin. Dezavantajı, onların
derleme kuralları hakkında hiçbir fikri yoktur, bu nedenle henüz oluşturulacak dosyalara güvenilir bir şekilde güvenemezler,
bir depodan alınacak dosyaları içerir. Ve genişletilebilir değiller
makepp'in tarayıcısı gibi diğer diller. Genellikle en az sizin kadar iyi durumdasınız, değil
bu araçlara başvurmak.
Bununla birlikte, bazı derleyiciler bunu bir yan ürün olarak üretebilir. Bunu kullanmayı tercih edersen
bkz: dahil.
Yapabilmek I kullanım önbellek, derleyici önbelleği or önbellek1?
Kısa cevap evet. Uzun cevap, bu programların işi tekrar etmesi gerektiğidir.
makepp, dosyaların güvenilir bir parmak izini almak için yapar. Geleneksel ile bunu bile yapar
çok geç geliyor, çünkü bunlar yeniden derleme gerektiren birçok durumu özlüyor. İle birlikte
makepp, ek avantajı olan yerleşik derleme önbelleğini kullanmak daha kolaydır
her türlü dosyayı işleyebilir.
ccache doğrudan modunun bir hatası olduğunu unutmayın https://bugzilla.samba.org/show_bug.cgi?id=8728
bu, dahil etme yollarındaki değişikliği yok sayar. Bu yapar t/makeppreplay.test ile başarısız
"yanlış dosya: dışarı". Bunu önlemek için "CCACHE_NODIRECT=1" dışa aktarın.
onworks.net hizmetlerini kullanarak makepp_faq çevrimiçi kullanın