İngilizceFransızcaİspanyolca

Ad


OnWorks favicon'u

metaconfig - Bulutta Çevrimiçi

Metaconfig'i Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü üzerinden OnWorks ücretsiz barındırma sağlayıcısında çalıştırın

Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi öykünücüsü veya MAC OS çevrimiçi öykünücüsü gibi birden çok ücretsiz çevrimiçi iş istasyonumuzdan biri kullanılarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen komut metayapılandırmasıdır.

Program:

ADI


metaconfig - bir Yapılandırma komut dosyası oluşturucu

SİNOPSİS


metayapılandırma [ -dhkmostvwGMV ] [ -L dir ]

TANIM


Metayapılandırma Configure komut dosyaları oluşturan bir programdır. ne olduğunu bilmiyorsan bir
Komut dosyasını yapılandırın, lütfen atlayın TUTORIAL bu kılavuz sayfasının bölümü. Eğer istersen
kullanım yolunun tam (resmi) açıklaması metayapılandırma ve birimleri, lütfen bakın
REFERANS Bölüm. Aşağıdaki bilgili için hızlı bir giriş ve referans
Kullanıcılar.

Metayapılandırma kümesinden çalışır birimleri metaconfig'in bildiği her şeyi tanımlayan
taşınabilirlik. Her birim bağımsızdır ve herhangi bir yere kaydedilmesi gerekmez
genel U dizinine veya özel U dizininize dahil edilmek dışında. Eğer
(metaconfig'in bir parçası olduğu) dist paketi LIB'ye yüklenir, ardından genel U
dizin LIB/dist/mcon/U'dur. Bu makinede, LIB dizini /usr/share/dist'tir. Sizin
özel U dizini, varsa, paketinizin en üst düzey dizinindedir.
Koşmadan önce metayapılandırma birkaç şey yapmalısınız:

· Çalıştırarak paketin en üst düzey dizininde bir .package dosyası oluşturun paket.
Bu program size paketiniz hakkında sorular soracak ve ona ne söylediğinizi hatırlayacaktır.
tüm dağıtım programları akıllı olabilir.

· Sözlüğe bakın (LIB/dist/mcon'da) ve kabuk komut dosyalarınızı ve C programlarınızı yazın
metaconfig'in nasıl tanımlayacağını bildiği semboller açısından. söylemene gerek yok
metaconfig hangi sembolleri kullandığınızı gösterir, çünkü metaconfig bunu sizin için çözecektir.

· Makefiles veya bağlı olacak kabuk komut dosyaları yazmak için gereken herhangi bir .SH komut dosyasını oluşturun.
Configure tarafından tanımlanan değerlerde. adında bir program var yapmakSH bu sana yardımcı olacak
düz bir komut dosyasını bir script.SH şablonuna dönüştürün; bazı düzenlemelerin hala yapılması gerekecek
içindeki değişken konfigürasyon bölümünü taşımak için elde edilen .SH dosyası üzerinde gerçekleştirilir.
betiğin üst kısmı (tarafından oluşturulan satır içi yorumlara bakın) yapmakSH .SH içinde
dosyası).

· Üst düzey dizininizde, içindeki tüm dosyaları listeleyen bir MANIFEST.new dosyası oluşturun.
Paketin. Bu dosya gizli kalacak ve finalin bir parçası olmayacak
dağıtım. (Kolaylık olması açısından, MANIFEST dosyası aşağıdakiler tarafından kullanılacaktır: metayapılandırma if
henüz MANIFEST.new dosyası yok.) Dosya adı, her birinde ilk alan olmalıdır.
hat. Biraz boşluk bıraktıktan sonra dosyanızı açıklayan kısa bir yorum ekleyebilirsiniz. Bir tek
kaynak dosyalar orada listelenmelidir. özel dosya yama düzeyi.h (hangisi
yama araçları tarafından işlenir ve bakımı yapılır - bkz. okşama(1)) parçası olmalıdır
MANIFEST.new dosyasıdır, ancak bazı araçlar tarafından sessizce göz ardı edilebilir. Kural olarak,
sadece RCS tarafından tutulan dosyalar burada listelenmelidir, yama düzeyi.h dosya
önemli bir istisna.

· İsteğe bağlı olarak, dışa aktarılmış bir sürüm olacak bir MANIFEST dosyası oluşturmak isteyebilirsiniz.
MANIFEST.new. Bu dosya, sürümün bir parçası haline getirilmelidir, yani her iki dosyada da listelenmelidir.
MANIFEST.new ve MANIFEST'in kendisi. Biri metayapılandırma birimler bunu biliyor
dosya ve tüm dosyaları sağlamak için Configure'ı bir sürüm kontrolü yapmaya zorlar.
listelenmiş, dağıtımın bir parçası vardır. MANIFEST ve MANIFEST.new dosyaları
Bağlantı değil, farklı olun.

· Değiştirmek istediğiniz tüm .U dosyalarını özel U dizininize kopyalayın. Herhangi bir .U dosyası
özel U dizininizdeki, genel U dizinindekine tercihli olarak kullanılacaktır.
dizin. Örneğin, herhangi bir birimi dahil etmeye zorlamanın bir yolu End.U'yu kopyalamaktır.
dosyasını .U dizininize ekleyin ve bağımlı olarak istediğiniz birimin adını ekleyin.
?MAKE: satırının sonu. Bazı birimler YALNIZCA bu şekilde zorlanabilir, yani
Warn_*.U ve Chk_*.U biçimindekiler. Ayrıca belirli varsayılanları özelleştirebilirsiniz
Myinit.U'yu paketinizin özel U dizinine kopyalayarak değişkenleri yapılandırın ve
değişkenleri o birimde ayarlamak.

Artık koşmaya hazırsınız metayapılandırma. Bu bir yapılandırma dosya ve isteğe bağlı olarak bir
yapılandırma_h.SH dosya (kaynaklarınız herhangi bir C sembolünü kullanıyorsa). Oluşturulan dosyalar
Gerekirse MANIFEST.new'inize otomatik olarak eklenir. bilgilerinizi güncellemeyi unutmayın
MANIFEST dosyası olsa da.

Yeni birimler oluşturmak için aşağıdakileri yapın:

· Benzer bir birimi yeni bir .U dosyasına kopyalayın. Seçtiğiniz ad, bir
birim tarafından oluşturulan değişkendir, ancak bu yalnızca sizin için bir kolaylıktır, bir
gereklilik. Dosya adının kesilmesini önlemek için 12 veya daha az karakter olmalıdır.
Aslında RCS kullanmak isteyenlerin sahip olabilmesi için muhtemelen 10 veya daha az olması gerekir.
a .U,v sonunda doğramadan. Metaconfig, ilk harfin durumunu kullanır.
Bu birim tarafından herhangi bir değişkenin gerçekten üretilip üretilmediğini belirleyin, bu nedenle
bir kabuk değişkeni üretmesi gerekiyorsa birim adı.

· İstediğinizi yapmak için yeni .U dosyasını düzenleyin. İlk ?MAKE: satırı,
bağımlılıklar; son listeden önce bu birimin tanımladığı tüm değişkenleri iki nokta üst üste koyun ve
son iki nokta üst üste işaretinden sonra, bu birimin bağlı olduğu tüm değişkenler (veya diğer birimler).
Bu listelerin doğru olması çok önemlidir. Bir bağımlılık isteğe bağlıysa ve
varsayılan değer kullanılabilir, bağımlılığın önüne bir '+' işareti koymalısınız. NS
gerçekten gerekli olmadıkça, sembolü hesaplamak için ilgili birim yüklenmeyecektir
başka bir birim tarafından

· Mümkün olduğu ölçüde, biriminizi, üzerinde tanımlanan kabuk değişkenine göre parametrelendirin.
?INIT: çizgiler. Bu, değişken tanımlarını Init.U birimine taşıyacaktır, burada
Init.U'dan sonra dahil edilen Myinit.U'daki tanımlar tarafından geçersiz kılınabilirler.

· ?H: çizgileri olarak istediğiniz herhangi bir C sembolünün tanımını ekleyin. ile başlayan bir satır
?H:?%<: .U dosyasındaki config.h dosyasına ancak ve ancak şu durumlarda eklenecektir:
metaconfig bu birimin gerekli olduğuna karar verir. %< birimin adı anlamına gelir,
takip ettiyseniz, dosyanın adı da (.U olmadan) olur.
ortak düşünce. Değişkenlerden birinin olması durumunda her zaman her ?H: satırına bir yorum koyun
satırın başındaki değişiklikler, yorumu bitirmeden başlatır. Herhangi bir kabuk
d_ ile başlayan değişken bunu yapabilir, bu yüzden dikkatli olun. ?%<: öğesini atlarsanız, o zaman
metaconfig, herhangi bir şeyden önce tanımı gerekli olan sembolü sezmeye çalışacaktır.
config.h'ye dahil etme

· Sözlük tanımlarını ?S: kabuk değişkenleri için satırlar ve ?C: C için satırlar olarak ekleyin
önişlemci değişkenleri Örnekler için geçerli bir birime bakın. çok önemli
her girişe sola dayalı bir sembol adı ile başlayın ve her girişi bir ?C: ile bitirin. veya
?S:. hat. için C önişlemci sembol girişlerini çeviren algoritma
config.h için yorumlar sözlüğü buna bağlıdır.

· Tüm sipariş emin olun ? çizgiler doğru. Doğru sıralama:

?RCS: ve ?X: temelde sadece yorumlar
? YAPIN: metaconfig bağımlılıkları
?Y: birim yerleşim yönergesi
?S: sözlük kabuk tanımları
?C: sözlük C tanımları
?H: config.h tanımları
?M: confmagic.h tanımları
?W: aranan semboller
?V: görünür semboller
?F: bu birim tarafından oluşturulan dosyalar
?T: kullanılan geçici kabuk sembolleri
?D: isteğe bağlı bağımlılıklar varsayılan değeri
?O: eski birimleri işaretlemek için kullanılır
?LINT: metalint ipuçları
?INIT: kabuk sembolleri başlatmaları

Satırların sırasını ve izin verilen çeşitli biçimleri gösteren bir örnek:

?RCS: $RCS-ID$
?RCS: Telif hakkı bilgileri
?RCS: $RCS-Günlüğü$
?X:
?X: Uydurma bir örnek
?X:
?MAKE:d_bir iki: üç +dört Beş
? YAPIN: - $@ % ekleyin
?Y:Varsayılan
?S:d_one:
?S: İlk kabuk sembolü, koşullu olarak BİR'i tanımlar.
?S:.
?S:iki:
?S: İkinci kabuk sembolü, İKİ için değer.
?S:.
?C:BİR:
?C: İlk C sembolü.
?C:.
?C:İKİ:
?C: İkinci C sembolü.
?C:.
?H:#$d_one BİR /**/
?H:#İKİ "$iki" tanımla
?H:#$d_one ONE_TWO "$iki"
?H:.
?M:çevir: HAS_FLIP
?M:#ifndef HAS_FLIP
?M:#define flip(x) flop(x)
?M:#endif
?M:.
?W:%<:one_two
?V:p_one p_two:p_üç
?F:dosya ./ftest !tmp
?T:tmp var
?D:iki='undef'
?LINT:üç değiştir
?INIT:two_init='2'
: birimi uygulayan kabuk kodu aşağıdaki gibidir
p_one='bir'
p_two='iki'
p_üç=""

Bir kez daha ifade edeyim: yukarıdaki birim tanımı bir sahte sadece göstermek için bir
farklı olasılıklar. Böyle bir birim zaten pek bir amaca hizmet etmeyecekti... Biraz daha
gelişmiş özellikler burada açıklanmaz. Lütfen REFERANS daha fazlası için bölüm
tüm bilgiler.

· Üniteyi uygun şekilde genel veya özel U dizinine yerleştirin.

· tekrar çalıştır metayapılandırma.

· Ünitenizi şuraya gönderin: [e-posta korumalı] (Raphael Manfredi) ana kopyaya dahil edilmek üzere,
eğer genel bir ilgi olduğunu düşünüyorsanız.

Bulunacak yeni bir program eklemek için:

· Loc.U'yu düzenleyin ve programın adını hem ?MAKE: satırına ekleyin (arasında
iki nokta üst üste) ve yerel listeye veya deneme listesine (programın
zorunlu veya değil).

· Metaconfig'i yeniden çalıştırın.

· Genel olduğunu düşünüyorsanız, ana kopyaya dahil edilmek üzere biriminizi bana gönderin.
ilgi.

.U dosyaları yazmak için notlar:

* Her zaman "rm -f" kullanın çünkü rm'nin varsayılan olarak etkileşimli olduğu sistemler vardır.

* "set -- ..." kullanmayın çünkü '--' her kabukta çalışmaz. "x ayarla ...;
vardiya".

* Unset tamamen taşınabilir olmadığından "unset ENV" kullanmayın. Bunun yerine "ENV=''" deyin.

* Eunice sistemleri nedeniyle her zaman echo " " (boşluklu) kullanın.

* Sadece kullan test -r, -w, -f veya -d ile, çünkü bunlar taşınabilir anahtarlardır. İçinde
özellikle, "test -x" ten kaçının.

* Yalnızca V7 ile gelen programları kullanın, böylece herkesin bunlara sahip olduğunu bilirsiniz.

* Koşullu olarak grep yapmak istediğinizde $contains kullanın, çünkü tüm grep'ler bir sonuç döndürmez.
makul durum. '>/dev/null kullanarak çıktıyı /dev/null'a yönlendirdiğinizden emin olun.
2>&1'.

* Her sh ikinci yapıyı bilmediğinden, "if [...]" yerine "if test" kullanın.

* Girişler için myread komut dosyasını kullanın, böylece kabuk çıkışlarını ve varsayılanları yapabilirler.
değerlendirme. genel formu

durumda "$grimble"
'') dflt=452;;
*) dflt="$grimble";;
esac
rp='Kaç tane grimble'ın var?'
. ./okudum
grimble="$ans"

* İsteğe bağlı olması için bir dosya yolu adı isterken getfile komut dosyasını kullanın.
~ isim genişletme ve akıl sağlığı kontrolleri. Tam açıklama için Getfile.U birimine bakın.

* Her zaman bir

$başlangıç

tarafından başlatılacak veya kaynaklanacak her oluşturulan komut dosyasının başında
yapılandırma.

* Asla bir nesne dosyasının bir .o ve
bir kitaplık adının bittiği .a. Kullan $_o ve $_a bunun yerine değişkenler (bkz.
Unix.U).

* Derleme-bağlama-yürütme testi yaparken, her zaman şöyle yazın:

$cc $ccflags $ldflags try.c -o $libs deneyin

çünkü bazı sistemler, derlenenden önce bağlantı bayraklarının belirtilmesini gerektirir.
hedef (sondaki bağlantı kitaplıkları hariç).

* Çıktıyı yeniden yönlendirmek için '>&4' kullanarak 4 numaralı dosya tanımlayıcısında önemli mesajlar yayınlayın.
olduğunda yalnızca bu mesajlar görünecektir. -s anahtarı verilir yapılandırma üzerinde
komut satırı (sessiz mod).

* Her zaman bir özelliğin en belirgin şekilde mevcut olup olmadığını belirlemeye çalışın-yapmayın
libc'yi grepleyebildiğiniz zaman "if bsd" deyin. Dışarıda birçok hibrit sistem var ve
her özellik kendi başına durmalı veya düşmelidir.

* Her zaman bir özelliğin en genel şekilde var olup olmadığını belirlemeye çalışın, böylece
diğer paketler ünitenizi kullanabilir.

* Şüpheye düştüğünüzde, bir varsayılan belirleyin ve sorun. Hiçbir şey varsaymayın.

* Kullanıcının hatalı olduğunu düşünüyorsanız, haklı olabileceği gerçeğine izin verin. İçin
örneğin, Configure'u kullanacağından farklı bir sistemde çalıştırıyor olabilir.
üzerinde son ürün.

Metaconfig, dizininizde aşağıdaki adları saklı tutar ve böyle bir ad kullanırsanız,
engellenebilir veya başka öngörülemeyen etkileri olabilir:

.MT/*
yapılandırma
Aranan
Eski
yapılandırmak
yapılandırma_h.SH
confmagic.h
Sen/*
MANİFEST.yeni

Ek olarak, Configure çalıştırıldığı dizinde şu adları engelleyebilir:

UU/*
yapılandırma.sh
yapılandırma.h

SEÇENEKLER


Aşağıdaki seçenekler tarafından tanınır metayapılandırma:

-d Hata ayıklama modunu açın. Hata ayıklama yapmadığınız sürece gerçekten kullanışlı değil metayapılandırma
kendisi.

-h Yardım mesajını yazdırın ve çıkın.

-k tarafından kullanılan çalışma dosyalarını inceleyebilmeniz için geçici dizini saklayın.
metayapılandırma inşa etmek için yapılandırma senaryo. Yalnızca hata ayıklarken kullanışlıdır
birimler.

-m Çok fazla bellek ve takas alanı olduğunu varsayın. Bu, sembol aramasını hızlandıracak
kaynak dosyaları, bellek pahasına önemli miktarda zaman
tüketim...

-o Eski sembolleri yenileriyle eşleyin. Hala biraz varsa, bu anahtarı kullanın.
kaynak kodunuzdaki eski semboller ve kaldırmak istemiyorlar (veya kaldıramıyorlar)
şimdilik onları. Eski semboller, aksi halde yoksayılır, ancak
size bir uyarı verecek metayapılandırma.

-s Sessiz modu açın.

-t Sembolleri bulundukça takip edin.

-v Ayrıntılı modu açın.

-w Wanted dosyasının güncel olduğunu varsayın. Bu, zamanı ve hafızayı atlayacaktır
bilinen sembolleri arayan kaynak kodu taramasının tüketen aşaması. kullan
yalnızca kaynak dosyanızın dosyaya göre değişmediğini bildiğiniz zaman
Havuz metayapılandırma kullanılan semboller.

-G Ayrıca bir GNU sağlayın yapılandırmak- oluşturulan ön uç gibi yapılandırma
komut dosyası da dağıtıma dahil edilecek. Bu sadece bir sarıcı
çevresinde yapılandırma doğal olarak komut dosyası, ancak insanların aşina olmasını sağlar
Yeni bir dağıtımla karşı karşıya kalındığında kaybolmaması için GNU aracı.

-L dir Varsayılan kitaplık konumunu geçersiz kıl. Normalde yalnızca metaconfig için kullanışlıdır
koruyucular, geliştirilmekte olan birimleri yerel olarak kullanmak için
halka açık olanlar. NS dir belirtilen birimleri içeren biridir
U dizin.

-M Üretime izin ver confmagic.h bazı kuyuları otomatik olarak yeniden eşlemek için dosya
gibi başka bir alternatife bilinen semboller kopya() yeniden eşleniyor
şeffaf bir şekilde memcpy() mevcut olmadığında. Bu seçenek açık
otomatik olarak bir confmagic.h dosya üst düzey dizinde bulunur.
Bu seçeneği kalıcı olarak devre dışı bırakmak istiyorsanız, o dosyayı kaldırmanız yeterlidir.

-V Sürüm numarasını yazdırın ve çıkın.

TUTORIAL


Bu (uzun) bölüm, konuya bir giriş niteliğindedir. metayapılandırma, tüm bunları öğreneceğimiz
temel bilgiler. Nasıl kullanılacağını zaten biliyorsanız metayapılandırma, güvenle bir sonrakine geçebilirsiniz
Bölüm.

Genel Bakış
Genellikle, belirli bir platformda derlemek için bir kaynak paketi almak istediğinizde,
ana Makefile'ı düzenlemek için (bir tane olduğunu varsayarak!), bir C derleyicisi seçin,
uygun kitaplıklara sahip olun ve ardından yapmak emretmek. Paket makul ise
iyi yazılmış, derlenecek (bir uyarı bir seçenek olmadan :-). Kendi içinde son
cümle, günümüzde mevcut olan UNIX platformlarının çeşitliliği göz önüne alındığında, gerçek bir performanstır.
ve lezzetlerin çeşitliliği, bu, paketin yazarının derinlere indiği anlamına gelir.
Bazı standart denemeler, tahminler ve karışıklıklar göz önüne alındığında doğru seçimleri bulmakta zorluk
sistem içerir ve türleri ile etrafında.

Ancak, tüm yeteneğine rağmen, yazarın bazı sistemlerin bir sistemi olduğunu bilmesi mümkün değildir.
bozuk sistem çağrısı veya bazı sistem yapılarının standart bir alandan yoksun olması veya
sadece belirli bir içerme dosyasının var olup olmadığı. Ve örtük olarak düşünmüyorum
tarafından döndürülen tür gibi varsayımlar malloc () işlevi veya varlığı
Adını değiştirmek() birkaç isim için sistem çağrısı. Ancak bu bilgi, gerçeğe ulaşmak için gereklidir.
taşınabilirlik.

Şimdi kendimizi kandırmayalım. Bu bilgiyi kullanmak daha fazla beceri gerektirir, ancak
daha sonra sistemden bağımsız bir şekilde yazıldığından daha taşınabilir programlara yol açar
ve yalnızca belirli bir sistemde bazı varsayımların doğru veya yanlış olduğu gerçeğine dayanır,
her varsayım birbiriyle ilgisizdir. Yani şunu söylemiyoruz:
BSD sistemi veya biz USG sistemi üzerindeyiz. Zaten bugünlerde bu çok bulanık. Hayır, istiyoruz
kaynak koduna söyleyin: bu sistemde Adını değiştirmek() sistem çağrısı ve malloc ()
bir verir (geçersiz *) değeri.

Metaconfig, tam da bunu yapmanıza izin verecek bir araçtır ve ek bir fayda sağlamaz.
Her şey yolunda giderse Makefile'ı elle düzenlemek zorunda kalırsınız. Koşarak metayapılandırma, sen bir oluştur
adlı kabuk komut dosyası yapılandırma. Configure betiğine çok fazla çaba harcandı
bu andan itibaren mevcut mermilerin %99'unda çalışmasını sağlamak için dahili
yazı. Configure, hedef sistemi araştıracak, şüphe duyduğunuzda sorular soracak ve
tüm cevapları tek bir kabuk dosyasında toplayın, bu da sırayla kullanılabilecek
otomatik olarak yapılandırılmış Makefiles ve C içerme dosyaları oluşturur.

Kabuk komut dosyalarınız için yalnızca sınırlı (ancak oldukça büyük) bir sembol seti vardır.
ve C programları. Hepsi Sözlük dosyasında belgelenmiştir. Tek yapman gereken öğrenmek
bunlar hakkında bilgi edinin ve bunları taşınabilirlik ve yapılandırma sorunlarını çözmek için kullanmaya başlayın. Sonra,
koşarak metayapılandırma, paketiniz için uygun bir Configure betiği oluşturulacaktır.

Configure betiği birkaç birim (300'den fazla) oluşturur, her birim
az sayıda kabuk ve/veya C sembolü tanımlamaktan sorumludur. Üniteler toplandı
son aşamada birlikte, bağımlılık grafiğini onurlandırmak (bir birimin sonuca ihtiyacı olabilir
daha sonra komut dosyasında daha önce yerleştirilen diğer birkaç birimin).

Semboller
Semboller hayattaki en önemli şeydir. metayapılandırma Dünya. onlar en küçük
tanınan varlık, genellikle bir kelimedir ve Yapılandırmanın sonunda bir değer verilebilir.
uygulamak. Örneğin, C ön işlemci sembolü HAS_RENNAME bir metayapılandırma sembol
tanımlanacağı garanti edilir, ancak ve ancak, Adını değiştirmek() sistem çağrısı mevcut. Aynı şekilde,
the $ ranlib kabuk değişkeni, ':' veya 'ranlib' olarak ayarlanacaktır.
aramak Ranlib bir kütüphane dosyası sipariş etmek için program gereklidir. Bu nasıl iş değil
Şimdilik önemli olan, bu sembollere bir anlam verildiğini anlamaktır. hayat
(yani bir değer) üzerine yapılandırma yürütme.

Sembolleri kullanmak nispeten basittir. Bir C kaynak dosyasında sadece sembolü kullanırsınız.
değer, bir ön işlemci yönergesi olarak (örneğin bir: #ifdef HAS_RENNAME) veya, eğer sembolü
değer, doğrudan C'de bir makro kullandığınız gibi bir dizedir. Ve bir kabuk dosyasında veya bir
Makefile, doğrudan bir kabuk sembolüne başvurabilirsiniz.

Aslında yalan söylüyorum çünkü bu önceki paragraftaki kadar sihir değil.
ses verebilirdi. Bir C dosyasında, Configure tarafından üretilen yapılandırma.h dosya ve
kabuk betiğinizi veya Makefile'ı bir .SH dosyasına sarmanız gerekir ve kabuğa başvurabilirsiniz.
sembolü yalnızca bu .SH dosyasının değişken değiştirme bölümünde. Bu konuda daha sonra.

Kaynak dosyalar
Semboller yalnızca sınırlı bir dizi kaynak dosyada görünebilir, çünkü metayapılandırma sadece olacak
bilinen sembolleri ararken, hangi birimlere ihtiyaç duyacağını bulmaya çalışırken bunları tarayın.
C kaynak dosyalarında C sembollerini kullanabilirsiniz, yani .c, .h, .y or .l uzantı ve
kabuk sembolleri yalnızca .SH dosyalarında aranır.

Bir sembolün değerini elde etmek için, bir C dosyasının özel olanı içermesi gerekir. yapılandırma.h
tarafından üretilen dosya yapılandırma C sembolleri mevcut olduğunda. Ve .SH dosyaları çalıştırılır
bir kabuk aracılığıyla, yeni bir dosya üretir. Ancak, .SH dosyasının üst bölümünde,
özel yapılandırma.sh dosya (ayrıca çalıştırılarak üretilir yapılandırma) kaynaklıdır ve değişkendir
ikameler geçerlidir. Aslında, yapılandırma.h çalıştırılarak üretilir. metayapılandırma-üretilmiş
yapılandırma_h.SH dosya, yine değişken ikame kullanarak. Yani buna bakacağız bir
biraz daha yakından çünkü bu bütünün kalbi yapılandırma şema...

Değişken Ikame
denilen kabuk yapısı var okuyun belge bir komutun girdi almasını sağlayan
betiğin kendisinde belirtilir. Bu girdi, kabuk tarafından bir çift olarak yorumlanır.
buradaki belgenin biçimine bağlı olarak alıntılanmış dize veya tek bir alıntılanmış dize
Şartname.

Burada bir belge belirtmek için '<<' belirteci ve ardından tek bir tanımlayıcı kullanılır. İtibaren
sonra, kalan komut satırı satırları, buraya gelene kadar komutun girişini oluşturur.
belge tek başına bir satırda bulunur. Kabuk değiştirme (kabuk değişkeni dahil
ikameler), tanımlayıcı tek tırnak içine alınmadıkça yapılır. Örneğin:

var='ilk'
tar='saniye'
echo "--> burada ilk belge:"
kedi <
var='$var'
katran = '$ katran'
EOM
echo "--> burada ikinci belge:"
kedi <<'EOM'
yankı $var
yankı $tar
EOM
echo "--> bitiş."

bir kabuktan geçtiğinde üretecek:

--> burada ilk belge:
var='ilk'
tar='saniye'
--> burada ikinci belge:
yankı $var
yankı $tar
--> son.

Buradaki ilk belgenin içeriği yorumlanırken, ikincisi olduğu gibi çıktılanır.
Birazdan göreceğimiz gibi, her ikisi de bir .SH betiğinde kullanışlıdır.

kullanma .NS Scripts
Bir .SH betiği genellikle çalıştırılarak üretilir. YapSH diğer mevcut bir dosyaya komut dosyası,
dönüşüm dosya bir içine dosya.SH. Tek bir örnek verelim. İşte küçük bir senaryo
(hadi diyelim büyük boy) tek bir mesaj yazdıran, int C'deki veri türü
Ne yazık ki, içinde kablolu bir değere sahiptir, bu nedenle:

#!/ Bin / sh
intsize='4'
echo "Bu makinede, int türü $intsize bayttır"

Hadi koşalım yapmakSH üzerine ' yazarakyapmakSH büyük boy'. bir tane alırız intsize.SH bunu dosyala
buna benzer:

durumda $CONFIG
'')
eğer test -f config.sh; sonra ÜST=.;
elif testi -f ../config.sh; sonra ÜST=..;
elif testi -f ../../config.sh; sonra ÜST=../ ..;
elif testi -f ../../../config.sh; sonra ÜST=../../..;
elif testi -f ../../../../config.sh; sonra ÜST=../../../..;
başka
echo "config.sh bulunamıyor."; çıkış 1
fi
. $TOP/config.sh
;;
esac
: Bu, SH dosyalarını SH dosyasıyla aynı dizinde hedef oluşturmaya zorlar.
: Bu, make bağımlı her zaman SH türevlerini nerede bulacağını bilir.
durumda "$ 0"
*/*) cd `ifade X$0 : 'X\(.*\)/'` ;;
esac
echo "Intsize ayıklanıyor (değişken ikamelerle)"
: Dosyanın bu bölümünde, üzerinde yapılan değişken ikameleri olacaktır.
: Yapılandırma alt öğelerine ihtiyaç duyan her şeyi !NO!SUBS! öğesinden taşıyın! bölümüne !GROK!BU!
: Yorumlanmasını istemediğiniz dolar işaretlerini ve geri tepmeleri koruyun
: önüne ters eğik çizgi koyarak. Bu yorumları silebilirsiniz.
$spitshell >intsize <
$başlangıç
!GROK!BU!

: Aşağıdaki dolar ve backticks'lerde ekstra ters eğik çizgiye gerek yoktur.
$spitshell >>intsize <<'!NO!SUBS!'
intsize='4'
echo "Bu makinede, int türü $intsize bayttır"
!HAYIR!SUB!
chmod 755 iç boyut
$eunicefix iç boyutu

Bu betiğin ilk kısmı ( dava ifadesi) bulmaya çalışıyor yapılandırma.sh
dosya, kaynak sağlamak için. NS $KONFIG değişken varsayılan olarak false, true olduğunda
yapılandırma.sh zaten kaynaklandı (bu dosyanın çalıştırılması durumunda durum böyle olurdu)
içinde yapılandırma ama burada konuyu karıştırmayalım).

bir kere yapılandırma.sh dosya kaynakları olmuştur, tarafından tanımlanan tüm kabuk sembolleri yapılandırma vardır
Ayarlamak. Mevcut dizini değiştirmek için kullanılan ikinci bir vaka ifadesine ulaştığını biliyoruz.
bu programa ulaşmak için kullanılacak yol (örneğin 'deseydik)sh ../scripts/intsize.SH', Biz
önce koşardı'cd ../Kodlar' devam etmeden önce). Bunu anlamıyorsan, yapma
Endişelen.

İşte ilginç şeyler geliyor. Bu komut dosyası, $tükürük kabuğu değişken ve değil
hakkında bildiğimiz bir şey... henüz. Sözlük dosyasına bakarsanız, bunu göreceksiniz.
bu tarafından bilinen bir değişkendir metayapılandırma. Bu dosyayı dağıtımınızın bir parçası yaparsanız
(MANIFEST.new dosyasına dahil ederek, buna daha sonra geri döneceğiz) ve çalıştırın
metayapılandırma, sonra yapılandırma komut dosyası bu değişken için uygun bir değer belirleyecektir.
ve içinde ayarlanacak yapılandırma.sh. Aynı şey için de geçerli $başlangıç ve gizemli $eunicefix at
son. Makul bir sistemde, ilgili kısım yapılandırma.sh şöyle görünürdü:

tükürük kabuğu = 'kedi'
startsh='#!/ Bin / sh'
eunicefix=':'

Ah! oraya geliyoruz. Şimdi tanıdık geliyor. tek bir yüzle karşı karşıyayız kedi kimin emri
girdi, burada değişken enterpolasyonlu bir belgeden gelir ve çıktısı şuraya yönlendirilir:
büyük boy. Değer şu olacak $başlangıç, yani '#!/ Bin / sh'. Şimdiye kadar iyi.

Ardından, betiğin kalanını elde etmek için buradaki ikinci belge genişletmesine ulaşırız. Bu
zaman, buradaki belge sembolü tek tırnak içine alınır, böylece içerik
kelimesi kelimesine eklendi büyük boy dosya. Yani, koşarak'sh intsize.SH', biz alırız
aşağıdaki çıktı:

Intsize ayıklanıyor (değişken ikamelerle)

ve üretilen intsize dosyasına bakarak şunu görüyoruz:

#!/ Bin / sh
intsize='4'
echo "Bu makinede, int türü $intsize bayttır"

bu tam olarak başlangıçta sahip olduğumuz şeydi. Şimdiye kadar, ameliyatsız bir prosedür...
Ama ne kadar harika! Öyle olur (tamamen tesadüf, güven bana!), metayapılandırma bilir
hakkında $intsize kabuk sembolü. intsize başlatmasını değişkene taşıyarak-
.SH betiğinin enterpolasyonlu alanı ve onu yapılandırma- hesaplanan değer,
ve tarafından eklenen şimdi işe yaramaz yorumları kaldırmak yapmakSH, şunu elde ederiz:

durumda $CONFIG
'')
eğer test -f config.sh; sonra ÜST=.;
elif testi -f ../config.sh; sonra ÜST=..;
elif testi -f ../../config.sh; sonra ÜST=../ ..;
elif testi -f ../../../config.sh; sonra ÜST=../../..;
elif testi -f ../../../../config.sh; sonra ÜST=../../../..;
başka
echo "config.sh bulunamıyor."; çıkış 1
fi
. $TOP/config.sh
;;
esac
durumda "$ 0"
*/*) cd `ifade X$0 : 'X\(.*\)/'` ;;
esac
echo "Intsize ayıklanıyor (değişken ikamelerle)"
$spitshell >intsize <
$başlangıç
intsize='$intsize'
!GROK!BU!

$spitshell >>intsize <<'!NO!SUBS!'
echo "Bu makinede, int türü $intsize bayttır"
!HAYIR!SUB!
chmod 755 iç boyut
$eunicefix iç boyutu

Tabii ki, bu betiği bir kabuk üzerinden çalıştırmak yine aynı betiği çıkaracaktır. Ama eğer
Biz koşmak yapılandırma olduğu bir makinede int 64 bitlik bir miktar olarak saklanır, yapılandırma.sh irade
set büyük boy 8'e ve büyük boy komut dosyası doğru değeri taşıyacak ve yazdıracaktır:

Bu makinede int türü 8 bayttır.

hangisi doğru. Tebrikler! Az önce bir kabuk betiği yapılandırdık!!

üreten yapılandırma.h
Artık yola bakabiliriz yapılandırma.h dışında üretilir yapılandırma_h.SH. Biz biliyoruz ki
koşu yapılandırma üretir yapılandırma.sh komut dosyası (bunun tam olarak nasıl yapıldığı kesinlikle
burada alakalı, ancak meraklılar için, burada başka bir belge ikamesi
yapılandırma kendisi). NS yapılandırma_h.SH kendisi tarafından inşa edilmiştir metayapılandırma aynı zamanda
yapılandırma Kaynaklarınızda en az bir C sembolü kullanmanız şartıyla.

biraz rastgele bakalım yapılandırma_h.SH gerçekten ne olduğunu görmek için dosya:

durumda $CONFIG
'')
eğer test -f config.sh; sonra ÜST=.;
elif testi -f ../config.sh; sonra ÜST=..;
elif testi -f ../../config.sh; sonra ÜST=../ ..;
elif testi -f ../../../config.sh; sonra ÜST=../../..;
elif testi -f ../../../../config.sh; sonra ÜST=../../../..;
başka
echo "config.sh bulunamıyor."; çıkış 1
fi
. $TOP/config.sh
;;
esac
durumda "$ 0"
*/*) cd `ifade X$0 : 'X\(.*\)/'` ;;
esac
echo "config.h ayıklanıyor (değişken ikamelerle)"
sed < config.h -e 'ler!^#undef!/define!' -e 's!^#un-def!#undef!'
/*
* Bu dosya config_h.SH betiği çalıştırılarak üretilmiştir.
*, değerlerini genellikle tarafından üretilen config.sh'den alır.
* Configure'u çalıştırıyor.
*
* Gerektiğinde bunlardan herhangi birini değiştirmekten çekinmeyin. Ancak not edin,
* config.h.SH'nin yeniden çalıştırılması, yaptığınız tüm değişiklikleri silecektir.
* Daha kalıcı bir değişiklik için config.sh dosyasını düzenleyin ve config.h.SH'yi yeniden çalıştırın.
*/

/* Yapılandırma zamanı: $cf_time
* Yapılandıran: $cf_by
* Hedef sistem: $myuname
*/

#ifndef _config_h_
# _config_h_ tanımla

/* kopyala:
* bcopy() rutini değilse, bu sembol memcpy ile eşlenir.
* dizeleri kopyalamak için kullanılabilir.
*/
/* HAS_BCOPY:
* Bu sembol, eğer bcopy() rutini mevcutsa tanımlanır.
* bellek bloklarını kopyalayın. altında bu sembolü kullanmamalısınız.
* normal koşullar ve bunun yerine doğrudan bcopy() kullanın;
*, bcopy mevcut değilse, memcpy() ile eşlenir.
*/
#$d_bkopya HAS_BCOPY /**/
#ifndef HAS_BCOPY
#ifdef kopyala
#un-def bkopya
#endif
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* memcpy ile eşlendi */
#endif

/* HAS_DUP2:
* Bu sembol, tanımlanmışsa, dup2 rutininin
* dosya tanımlayıcılarını çoğaltmak için kullanılabilir.
*/
#$d_dup2 HAS_DUP2 /**/

/* I_STRING:
* Bu sembol, tanımlanmışsa, C programına yapılması gerektiğini belirtir.
* Dahil etmek (USG sistemleri) yerine (BSD sistemleri).
*/
#$i_string I_STRING /**/

#endif
!GROK!BU!

Dosyanın en üstünde, zaten sahip olduğumuz standart .SH yapısını tanıyoruz.
detaylı olarak incelenmiştir. Daha sonra, burada bir belge aracılığıyla dosyanın kendisinin çıkarılması gelir.
değişken ikameler. Ancak burada düz kullanmıyoruz. kedi ancak susuzluk bunun yerine, çünkü
Anında biraz daha düzenleme yapmamız gerekiyor. Nedenini daha sonra göreceğiz, o yüzden unutalım
şu anda bununla ilgili.

Şimdi önde gelen yoruma ulaşıyoruz ve dosya yapılandırma zamanı ile etiketlendi,
hedef sistem, vb... (kaynaktan gelen değişkenler yapılandırma.sh dosya olmuştur
tarafından kurulan yapılandırma). Bu yorum başlığını korumak için bir '#ifndef' koruması izler
bu dosyanın birden fazla eklenmesine karşı. Sonra dosyanın kalbi gelir...

Bunu bilmek yardımcı olur $d_* ve $i_* değişkenler ya ' olarak ayarlanırtanımlamak'veya'tanımsız' tarafından
yapılandırma, sistemde bir işlevin veya içerme dosyasının bulunup bulunmadığına veya
Olumsuz. Bu şu anlama gelir:

#$d_bkopya HAS_BCOPY /**/

satır aşağıdakilerden birine genişletilecektir:

#tanım HAS_BCOPY /**/

$d_bcopy değişkeni 'define' olarak ayarlanmışsa veya:

#undef HAS_BCOPY /**/

$d_bcopy 'undef' olarak ayarlandıysa, çünkü özellik orada değildi. Ancak, bu değil
içine ne yazılır yapılandırma.h dosya nedeniyle susuzluk daha önce gördüğümüz filtre,
hangi ikinci formu dönüştürecek:

/*#tanımla HAS_BCOPY /**/

Bu, daha sonra düzenlemek için kullanışlı bir formdur. yapılandırma.h çünkü yalnızca kaldırmanız gerekir
geçersiz kılmak istiyorsanız baştaki '/*' yapılandırmaseçimi. Aynı şekilde, tek bir ekleyebilirsiniz
Belirli bir sembolün tanımını önlemek için '#define' satırının başında '/*'.
Bu nedenle, her bir sembol tanımı, baştaki karakteri kapatmak için bir '/**/' ile korunur.
'/*' ile açılan yorum (yorumlar C'de yuvalanmaz).

Şimdi '#undef'i '/*#define'e dönüştürmek güzel, ama eğer gerçekten bir yazmak istiyorsak
'#undef', sıkışıp kaldık... '#un-def' olarak yazıp izin vermedikçe susuzluk bunu '#undef' olarak düzelt
üretirken yapılandırma.h, aslında burada yapılan şey budur.

Aynı tür akıl yürütme bu iki satır için de geçerlidir:

#$d_dup2 HAS_DUP2 /**/
#$i_string I_STRING /**/

ve varsayarak yapılandırma.sh tanımlar:

d_dup2='tanımla'
i_string='undef'

üretilene gireceğiz yapılandırma.h:

#HAS_DUP2'yi tanımla /**/
/*#I_STRING tanımla /**/

Akan su kadar temiz mi? İyi!

Şimdi açık olmalı ki dahil ederek yapılandırma.h tüm C kaynak dosyalarınızda
biliyor musun yapılandırma sisteminizde tahmin etti. Aslında, bu sembolleri kullanarak,
yapılandırılmış C kodu yazma, çünkü metayapılandırma bu sembollere ihtiyacınız olduğunu bilecek ve
uygun bir üret yapılandırma_h.SH dosyanın yanı sıra gerekli tüm kodlar yapılandırma için
onlar için uygun bir değer hesaplayın (ilişkili kabuk değişkenlerine değerler atayarak).

Koşu Metayapılandırma
Şuna odaklanalım metayapılandırma birimlerini nasıl kullandığını anlamak için bir süre programlayın ve
gerekli tüm yapılandırma dosyalarını üretmek için kaynak kodunuz. Yeni yazmayı düşünüyorsanız
birimleri, tüm şemayı iyi anlamalısınız.

MANIFEST.new dosyası yoksa, metayapılandırma bunun yerine MANIFEST dosyasını kullanmaya çalışacak,
kolaylık sağlamak için. MANİFEST.new'den bahsettiğimiz her yerde MANİFEST olarak anlaşılabilir.
paketinizin kökünde MANIFEST.new dosyası bulunmaması şartıyla.

MANIFEST.new dosyanızın doğru şekilde ayarlandığını ve istediğiniz tüm kaynak dosyaları listelediğini varsayarsak
yapılandırın ve çalıştırdığınız paket oluşturmak için kök kaynak dizininizde
.package dosya, çalıştırabilirsiniz metayapılandırma ve aşağıdakileri alacaksınız:

$ metayapılandırma
Birimler bulunuyor...
312 birimden bağımlılık listeleri ayıklanıyor...
Dosya adları (*.[chyl] ve *.SH) MANIFEST.new'den ayıklanıyor...
Wanted dosyası oluşturma...
Semboller için .[chyl] dosyaları taranıyor...
Semboller için .SH dosyaları taranıyor...
Optimum bağımlılık grafiği hesaplanıyor...
Özel yapım dosyası oluşturuluyor...
Yüklenebilir birimler belirleniyor...
make dosyası güncelleniyor...
Birimler için doğru sıranın belirlenmesi...
Yapılandırma Oluşturuluyor...
Bağış yapın.

İlk aşama, genel dizindeki tüm birim dosyalarını (.U ile biten) arar.
önce, sonra özelinde. Genel bir dosyayı özel U dizininizde kopyalarsanız
(yani, paketinizin en üst düzeyinde U adlı bir dizin), kamuyu geçersiz kılacaktır.
sürüm. Kullanılabilir tüm birimlerin bir listesine sahip olduğunda, bunları ayrıştırır ve tümünü çıkarır.
?MAKE: bağımlılıkları ve bilinen kabuk sembollerini bilmek için satırlar. Ayrıca
C sembolleri ve hangi kabuk sembollerinin olması gerektiği hakkında bilgi edinmek için ?H: satırlarına odaklanır.
bu C sembolü için uygun bir değer elde etmek üzere hesaplandı (böylece başka bir bağımlılık düzeyimiz var)
İşte).

Ardından, uygun dosya adları MANIFEST.new dosyalarından ayıklanır ve Aranan dosya
yerleşik: bu dosya, o paket için gereken tüm C sembollerini ve kabuk sembollerini listeler. Biz
önce C tipi dosyaları C sembolleri için tarayın, ardından bağımlılıkları
ilişkili kabuk sembolleri (?H: satırlarından toplanır). Sonraki .SH dosyaları taranır ve son olarak
tüm kabuk sembolleri bilinmektedir.

Geçici bir Makefile oluşturulur ve metaconfig, yapmak görülecek tüm kabuk sembolleri
hangi komutlar (ikinci ?MAKE: satırlarında listelenmiştir) yürütülür ve böylece hangi birimler
gerçekten gerekli. Başka türlü gerekmeyen isteğe bağlı birimler kaldırılır ve ikinci bir Makefile
oluşturuldu. Bu sefer, tüm birimleri ve ilgili siparişlerini biliyoruz, isteğe bağlı
kaldırılan birimler ve kabuk sembolleri için hesaplanan varsayılan değerler. NS
yapılandırma komut dosyası daha sonra ile birlikte oluşturulabilir yapılandırma_h.SH. Yapılmıştı.

konvansiyonlar
Tüm sürecin sağlıklı olması için uygun sözleşmelere uyulması gerekir. bir vaka var
birimler için kural ve bir değişken adlandırma kuralı.

Özel birimler olmadıkça tüm birimlerin ilk harfi küçük olmalıdır. Tarafından
özel olarak, bunlar tarafından kullanılabilecek yeni kabuk değişkenlerini gerçekten tanımlamadıklarını kastediyoruz.
kullanıcı .SH dosyalarında değil, daha çok komut dosyaları veya kabuk değişkenleri üreten birimlerdir.
tarafından dahili olarak kullanılacak yapılandırma senaryo. Tipik örnekler Başlat.U olan dosya
ana değişken başlatma veya Okuduğum.U üreten benimokuma neredeyse kullanılan komut dosyası
her yerde yapılandırma kullanıcıya bir soru sorulacağı zaman.

Özel olmayan birimler daha sonra iki farklı gruba ayrılır: değişkenleri tanımlayan birimler
bir C sembolü ve kendi kabuk değişkenlerini tanımlayan birimlerle ilişkilendirilir. ilk grup
dosyaları dahil etmekle ilgili değişkenlere daha da bölünmüştür (adları i_) Ve
diğer tanımlarla ilgili değişkenler (ile başlayan ad d_). İkinci grup var
örneğin kendi başına duran isimler cc.U tanımlar $cc değeri olan kabuk değişkeni
kullanılacak C derleyicisi.

Özel birimler bazen önceden tanımlanmış bazı değişkenleri kendilerine ayırır ve "sonuçlar" döndürür.
diğer iyi bilinen değişkenlerde. Örneğin, benimokuma Myread.U tarafından üretilen komut dosyası
içinde istemi bekliyor $rpm, varsayılan cevap $dflt ve kullanıcı yanıtını yerleştirir $ ans.
Bu, bu kılavuz sayfasında belgelenmemiştir: gidip ünitenin kendisine bakmalısınız.
Hangi değişkenlerin kullanıldığını ve birimin nasıl kullanılacağını anlayın.

kullanma The Sözlük
Sözlük dosyası, tarafından otomatik olarak üretilir. makyaj yapmak ayıklayan komut dosyası
?S:, ?C: ve ?MAKE: gelen bilgileri satırlar ve alfabetik olarak yeniden biçimlendirir.
sıralı sözlük. Sahip olduğunuz semboller hakkında bilgi sahibi olmak için Sözlüğü okumanız önemlidir.
kullanmasına izin verildi. Ancak, Sözlük size bunları nasıl kullanacağınızı söylemeyecektir. Genellikle, bu
size kalmış.

Bir gün muhtemelen kendi birimlerinizi yazacaksınız ve hakkında yeterince bilgi sahibi olacaksınız. metayapılandırma
Bunu hızlı ve verimli bir şekilde yapmak için. Ancak, çalışmanızı uygun şekilde belgelemeyi asla unutmayın.
?S: ve ?C: satırları veya diğer kişiler onu yeniden kullanamaz. hakkında hatırla
Başlamak için yalnızca Sözlük ve bu kılavuz sayfasına sahip olduğunuz zaman.

Sonuç
Şimdi biliyorsun ki metayapılandırma temel bilgileri okumalısınız TANIM bölüm, sonra
atla REFERANS izin verilenler gibi tüm kanlı ayrıntıları öğrenmek için bölüm
birim kontrol satırları ('?' ile başlayan satırlar) veya farklı MAKE komutları için sözdizimi
kullanmanıza izin verilir.

REFERANS


Bu bölüm, iç metayapılandırma, temel olarak birim sözdizimi, özel
Bilmeniz gereken birimler ve ipucu dosyaları.

genel birim Sözdizimi
Bir metaconfig birimi iki farklı bölüme ayrılmıştır. Başlık bölümü (başlayan satırlar
'?' ile) ve bir kabuk bölümü (kod yapılandırma senaryo). Bu
birim içinde herhangi bir yere '?X:' yorumları eklemek mümkündür, ancak diğer '?' çizgiler (ayrıca
denilen kontrol hatları) sıkı bir sipariş politikası var.

Bir kontrol çizgisi çok uzunsa, sondan kaçarak bir devam kullanmak mümkündür.
ters eğik çizgi ile yeni satır ve bir sonraki satırda devam eder (daha sonra girintili olmalıdır)
boşluklara veya sekmelere göre).

Aşağıda, kontrol hatlarının her birinin resmi açıklaması yer almaktadır. Belirtilmediği sürece
aksi halde bu sunumun sırası ünite içinde kullanılacaktır.

?RCS: ücretsiz metin
Ünitenin üst kısmında, RCS yorumları için kullanılmak üzere.

?X: herhangi metin
Genel amaçlı yorumlar. Ünitenin herhangi bir yerinde görünebilir ancak iki yana dayalı olarak bırakılmalıdır.
RCS yorumları için lütfen ?RCS: yorum formunu kullanın.

?YAPMAK:sembol liste: bağımlılık liste [+isteğe bağlı]
Bu ilk bağımlılık satırıdır. İlk sembol liste tüm sembolleri listelemeli
bu birim tarafından oluşturulur (yani değeri birimin kabuk bölümü tarafından hesaplanır).
Semboller boşlukla ayrılmalıdır. Tanımlanmış bir sembol yalnızca dahili kullanım içinse ve
oluşturulan içinde görünmemelidir yapılandırma.sh dosya, o zaman ondan önce bir
'+' (bundan sonra tanımlanan isteğe bağlı bağımlılıklarla karıştırılmamalıdır). İkinci
listenin bir kısmı (ortadaki ':' işaretinden sonra) birim bağımlılığıdır. Hepsini listelemeli
kabuk tarafından kullanılan tüm sembollerin yanı sıra gerekli özel birimler
uygulama. Bir sembol işaretliyse ancak yapılandırma değeri kritik değilse,
önüne bir '+' gelebilir, bu durumda buna koşullu bağımlılık denir: onun
karşılık gelen birim, yalnızca ve yalnızca bu sembol gerçekten başka türlüyse yüklenecektir.
aranan; aksi takdirde varsayılan değer kullanılacaktır.

?YAPMAK:çıkıntı komuta
İlk bağımlılık satırlarını izleyen bir veya daha fazla komut satırı olabilir. Onlar
birim onları yüklemek istendiğinde komutlar yürütülecektir. yapılandırma. Görmek
Daha fazla bilgi için make komutları hakkındaki paragrafa bakın. Dikkat edin, önde gelen çıkıntı
karakter önce gereklidir komuta.

?Y:düzen
Bu birim için bir yerleşim yönergesi bildirin. Bu yönerge dizelerden biri olabilir
üst, varsayılan or alt (durum önemli değil, önerilen stil onları hecelemektir.
büyük harfle). atlanırsa, varsayılan kabul edilir.

Bu yönerge yalnızca, bir birimi üstte veya altta zorlamak istiyorsanız gereklidir.
üretilen yapılandırma komut dosyası, birim bağımlılıkları izin verdiği için. Önemli
sorular bu nedenle başlangıçta zorlanabilir. Aynı düzen sınıfı içinde, birimler
d_* ve i_* birimleri için iki özel durumla alfabetik olarak sıralanır, zorunlu
sırasıyla sınıflarının üstünde ve altında (ancak bunlar
varsayılan sınıf).

En tepede, bağımlılıkları diğer tüm birimlerin çalışmasını gerektiren bir birimi zorlarsınız.
ondan önce, ilginç bir şey elde edemezsiniz. Bu nedenle, bu direktif gerçekten
pek çoğuna bağlı olmayan bazı etkileşimli birimlerin önceliğini artırmak için kullanılabilir.
yolla ilgili sorular gibi kullanıcı tarafından görülebilen diğer semboller.

?S:sembol_adı [(eski sembol liste)]:
Bir kabuk sembolü sunar. Bu ilk satır, sembolü adlandırır, ardından isteğe bağlı olarak bir
parantez içine alınmış ve eski eşdeğerini veren liste. eskimiş olanlar
semboller yenisiyle yeniden eşlenecek sembol_adı eğer -o seçenek verilir
metayapılandırma.

?S:herhangi yazı, için Sözlük
Temel olarak, tarafından ayıklanacak olan kabuk sembolünü açıklayan bir yorum makyaj yapmak
Sözlük dosyasına girin.

?S:. Kabuk sembolü açıklamasını kapatır.

?C:sembol_adı [~ takma ad] [(eski sembol liste)]:
Yeni bir C sembolü sunar. NS takma ad isim, C sembolünün altında yer alacağı isimdir.
kontrol edilebilir, yani takma ad sembolü isteniyorsa, o zaman o C sembolü yazılacaktır.
içinde yapılandırma_h.SH dosya. Genellikle takma ad yalnızca '%<' şeklindedir (birimin adını temsil eder)
ve ayrıca bir C sembolünü takma ad. Ayrıca ilgili kısımlar
?H: satırlarının bir '?%<' koşulu tarafından açıkça korunmaktadır. sembolü gör
Daha fazla ayrıntı için takma paragraf. Satırın geri kalanı isteğe bağlı
eski sembol listeyeni için eski eşdeğerleri listeleyen sembol_adı.

?C:herhangi yazı, için Sözlük ve yapılandırma_h.SH
Temel olarak, tarafından çıkarılacak olan C sembolünü açıklayan bir yorum makyaj yapmak
Sözlük dosyasına ve metayapılandırma içine yapılandırma_h.SH simge ise dosya
(veya sembol takma kullanıldığında takma adı isteniyorsa).

?C:. C sembolü açıklamasını kapatır.

?H:?sembol:yapılandırma_h.SH şey
Bu, genel dahil etme isteğidir yapılandırma_h.SH. Satır yalnızca şu durumlarda yazılır:
koruma sembol gerçekten isteniyor. Bu genel form, C sembolü olduğunda gereklidir.
takma ad kullanıldı. Aksi takdirde, diğer "standart" formlardan birini kullanırsanız,
koruma otomatik olarak yapılır metayapılandırma kendisi.

?H:#$d_var VAR "$ var"
Koşullu olarak tanımlar VAR C sembolü $ var ne zaman ' olarak ayarlanırtanımlamak'. bir
'?VAR:' koruma durumu ve metayapılandırma otomatik olarak bağlantılar VAR iki kabuğuna
değişken bağımlılıklar (yani her ikisi de $d_var ve $ var olarak işaretlenecek aranan if VAR is
C kaynaklarında kullanılır).

?H:#tanımla VAR [isteğe bağlı metin]
Her zaman tanımlar VAR Bir değere C sembolü. ' anlamına gelir?VAR:' koruma durumu.
Birimin kendisine otomatik bir kabuk bağımlılığı yapılır.

?H:#tanımla VAR(x,y,z) $ var
Her zaman makroyu tanımlar VAR değeri olmak $ var değişken. o kadar
sağlamak için birim $ var mantıklı bir değere sahiptir. C arasında otomatik bir bağımlılık
makro VAR ve kabuk değişkeni belirlenir ve tüm hat bir
örtük '?VAR: '.

?H:#$d_var VAR
koşullu tanımlar VAR if $d_var ayarlandı 'tanımlamak'. ' anlamına gelir?VAR:' koruma
şart. için otomatik bir kabuk bağımlılığı oluşturulur. $d_war.

?H:#tanımla VAR "$ var"
için yapılandırılmış bir değer atar. VAR C sembolü. ' anlamına gelir?VAR:' koruma koşulu.
Bağlanmak için otomatik bir kabuk bağımlılığı oluşturulur VAR ve $ var.

?H:. kapatır yapılandırma_h.SH dahil etme talepleri

?M:C sembol: C bağımlılıklar
C sembolü ile ilgili sihirli tanımı tanıtır, çünkü confmagic.h, tanımlar ve
kalan ?M için koruma sembolü: tanımlar. Bu satır sessizce ima eder
'?W:%<:C sembol', yani ünite, C sembolü belirirse Configure'a yüklenecektir.
C kaynakları içinde büyü kullanılıp kullanılmadığına bakılmaksızın. C bağımlılıkları etkinleştirildi
tanımlarını zorlamak için büyü kullanıldığında yapılandırma_h.SH. Ancak, eğer
sihir değil kullanılmış ancak C sembolü gerekli C olmadan kaynakta görünüyor
bağımlılıklar nedeniyle, Wanted dosyası her oluşturulduğunda uyarılırsınız, çünkü
bir taşınabilirlik sorunu (ve ayrıca ünite koşulsuz olarak
C sembolü kullanıldığında, diğer ?C: satırlarından bağımsız olarak yapılandırın.
birimi).

?M:cpp tanımlar
İlgili olduğunda confmagic.h içinde tanıtılacak sihirli cpp eşlemesini tanımlar.
sembolü kullanılır. Bir örtülü var mı?sym' nerede koruyor sym sembol adıdır
önde gelen ?M: satırı ile tanımlanır.

?M:. kapatır confmagic.h dahil etme isteği

?K:kabuk sembol liste:C sembol liste
Kabuk sembollerinin kaderini C sembollerinin kaderiyle bağlar: eğer C sembollerinden herhangi biri
listelenen semboller isteniyorsa, tüm kabuk sembolleri isteniyor olarak işaretlenir. Yararlı
bazı C varlığında bir birimin dahil edilmesini zorla (kabuk sembolü listesi '%<' olarak ayarlanmıştır)
sembolü algılanır. Kenardan faydalanmak için kabuk sembol listesi boş bırakılabilir.
Yerleşik ön işlemci içindeki C sembol konumunun etkisi (sembol tanımlı
kaynakta bulunuyorsa, bu ön işlemci için). Boşluklu desen aramak için
bunlarda, 'struct'ta olduğu gibi C sembollerini basit tırnak işaretleri içinde alıntılamanız gerekir.
saat dilimi'.

?V:salt okunur semboller:salt yazma semboller
Bu bir maden ipucu ve yalnızca bazı kabukları dışa aktaran özel birimlerde kullanılmalıdır
değişkenler. Ortadaki ':' işaretinden önceki değişkenler salt okunur olarak dışa aktarılır (değiştirilir)
bir uyarı verir), diğer semboller serbestçe okunabilir ve değiştirilebilir.

?F:Dosyaları çevrimiçi kurslar düzenliyorlar.
Bu hat iki amaca hizmet eder: maden ipucu ve ayrıca bir yer tutucu
gelecek jmake kullanmak. Üç tür dosya listelemelidir: geçici olan
bir test için oluşturulmuş, daha sonra UU dizininde oluşturulan özel UU olanlar
gözden geçirme ve paketin kök dizininde kalan herkese açık olanlar. Geçici
dosyalar bir '!' ile listelenmelidir. karakter ("hayır! yeniden kullanılmazlar" anlamına gelir)
sonra!"), özel UU dosyalarının önünde bir './' olmalıdır (anlamı: bunları kullanmak için, diyelim ki
./dosya, Sadece dosya) ve genel olanlar olduğu gibi adlandırılmalıdır.

?T:kabuk geçiciler
Başka maden ipucu. Bu satır, geçici olarak kullanılan tüm kabuk değişkenlerini listeler.
bu birimin kabuk bölümü içinde.

?NS:sembol='değer'
Koşullu bağımlılıklar olarak kullanılan semboller için başlatma değeri. Hayır ise ?D: satır
bulunduysa, bunun yerine boş bir değer kullanılır. NS maden program sizi uyarırsa
sembolü koşullu bağımlılık olarak en az bir kez kullanılmış ve uygun bir
?D: başlatma. Bir boş değer için bile bu satırları eklemek iyi bir uygulamadır.
bir sembolün muhtemelen isteğe bağlı doğasını vurguladığı için başlatma.

?Ö:herhangi mesaj sen istemek
Bu yönerge, bu birimin bir bütün olarak eski olduğunu gösterir. Ne zaman herhangi bir kullanım
sembollerinden (veya bağımlılıklar yoluyla dolaylı kullanım) yapılırsa, mesaj çıktısı
ekran (stderr'de). Bir veya daha fazla satır koyabilirsiniz, bu durumda her satır
sırasıyla basılacaktır.

LINT:maden ipuçları
Bak maden olabilecek farklı ipuçlarının açıklaması için kılavuz sayfası
Kullanılmış.

?İÇİNDE:başlatma kod
Bu satır tarafından belirtilen başlatma kodu, ekranın en üstüne yüklenecektir.
yapılandırma ünitenin gerekli olması koşuluyla komut dosyası.

C sembol Takma ad
Bazen güvenmek mümkün değildir metayapılandırmaiçin kendi varsayılan seçimi yapılandırma_h.SH
yorumlar ve C sembolü tanımı. İşte burada takma ad devreye giriyor. Daha ziyade olduğundan
Açıklaması zor olsa da, altında yatan mekanizmayı anlamak için bir örnek üzerinde çalışacağız.

d_const.U birimi, C derleyicinizin aşağıdakileri bilip bilmediğini belirlemeye çalışır. const
anahtar kelime. Olmazsa, izin vermek için bu anahtar kelimeyi boş bir dizeye yeniden eşlemek istiyoruz.
program derleme. Ayrıca, test yapıldığında testi otomatik olarak tetiklemek istiyoruz. const sözcük
kullanıldı.

d_const.U biriminin ilgili bölümleri şunlardır:

?MAKE:d_const: kedi cc ccflags Setvar
? YAPIN: - $@ % ekleyin
?S:d_const:
?S: Bu değişken koşullu olarak HASCONST sembolünü tanımlar.
?S: C programına, bu C derleyicisinin aşağıdakiler hakkında bilgi sahibi olduğunu gösterir.
?S: sabit tip.
?S:.
?C:HASCONST ~ %<:
?C: Bu sembol, tanımlanmışsa, bu C derleyicisinin bildiğini gösterir.
?C: sabit türü. Bu sembolü gerçekten test etmeye gerek yok
?C: programlarınızın içinde. Yalnızca "const" anahtar sözcüğünün kullanılması,
?C: gerekli testleri tetikleyin.
?C:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:# sabit tanımla
?H:?%<:#endif
?H:.
?W:%<:const
?LINT:d_const'u ayarla
?LINT:bilinen sabit
: const anahtar sözcüğünü kontrol edin
Eko " "
echo 'C derleyicinizin "const" hakkında bilgi sahibi olup olmadığı kontrol ediliyor...' >&4
/bin/kedi >const.c <<'EOCP'
ana()
{
const karakter *foo;
}
EOCP
if $cc -c $ccflags const.c >/dev/null 2>&1 ; sonra
val="$tanımla"
echo "Evet, öyle."
başka
val="$undef"
echo "Hayır, değil."
fi
d_const'u ayarla
değerlendir $setvar

İlk önce, temelde şunu söyleyen bir ?W: satırının kullanıldığını fark ederiz: "Bu birim,
const anahtar kelime bir C dosyasında kullanılıyor.". Koşullu olarak yeniden eşlemek için const bir boşluğa
dizi yapılandırma.h, koşullu tanımlamayı seçtim HASCONST üzerinden $d_const.

Ancak bu bir sorun yaratır, çünkü HASCONST sembolü kullanılmayacaktır.
kaynaklar, yalnızca const jetondur. Ve ?H: çizgi tanımlama HASCONST dolaylı olarak
'HASCONST' tarafından korunmaktadır. Bu nedenle, anlatmak için açık '?%<' kısıtlamasını eklemeliyiz.
metayapılandırma bu satırların dahil edilmesi gerektiğini yapılandırma_h.SH ne zaman '%<' sembolü
aranıyor (%< burada birimin adını ifade eder d_const).

Bu neredeyse mükemmel, çünkü ?W: satırı d_const her ne zaman const kullanılır, daha sonra
?H: satırları yapılandırma_h.SH dosya. Ancak, önde gelen yorum (?C:
çizgiler) ekli HASCONST kendisi de korunur HASCONST, yani örtük bir anlamı var
'?HASCONST' kısıtlaması. Bu nedenle ihtiyaç örtüşme the HASCONST '%<' için sembol.

Ünitenin geri kalan kısmı (kabuk kısmı) gerçekten basittir. basitçe
kullanarak örnek bir C programı derlemeye çalışır. const anahtar kelime. Yapabilirse, o zaman olur
tanımlamak $d_const ile $setvar işlev (tarafından tanımlanan Setvar.U birim). paragrafa bakın
Daha fazla ayrıntı için özel birimler hakkında.

Yapmak Komutları
?MAKE: komut satırında, olduğu gibi yürütülecek bir kabuk komutu veya
özel -toplamak tarafından yakalanan komut metayapılandırma ve ne olması gerektiğini görmek için ayrıştırıldı
tamamlamak. Baştaki '-' yalnızca önlemek için vardır yapmak komut döndüğünde başarısız olmaktan
sıfır olmayan bir durum -- kullandığımızdan beri gerçekten gerekli değil 'yapmak -n' çözmek için
bağımlılıklar, ancak gelecekteki sürümlerde zorunlu hale gelmesi durumunda saklamanızı tavsiye ederim.
sözdizimi seçmek komut:

-toplamak cmd $@ Hedef dosya

nerede $@ geçerli hedef için duran Makefiles içindeki standart makrodur (ad
son .U uzantısı soyulmuş olarak inşa edilmekte olan ünitenin). NS cmd bölüm
gerçek metayapılandırma çalıştırılacak komut ve Hedef dosya olan başka bir parametredir,
yorumlama bağlıdır cmd kendisi. Ayrıca son .U uzantısı soyulmuş ve
normalde bir birim dosyasına atıfta bulunur, './' ile başlamadığı sürece, bu durumda birine atıfta bulunur
arasında metayapılandırma içindeki dosyaları kontrol et '.MT dizin.

Kullanılabilir komutlar şunlardır:

ekle Hedef dosya için yapılandırma.

ekle.Config_sh
o kısmı doldurur yapılandırma üretmek yapılandırma.sh dosya. Sadece kullanılmış
değişkenler eklenir, koşullu olanlar (koşullu bağımlılıklardan)
atlandı.

add.Null Boş bir dize için kullanılan tüm kabuk değişkenlerini başlatan bölümü ekler.

c_h_weed yapılandırma_h.SH dosya. Yalnızca gerekli satırlar yazdırılır.

cm_h_weed confmagic.h dosya. Yalnızca gerekli satırlar yazdırılır. Bu
komut yalnızca şu durumlarda etkinleştirilir: -M anahtar verildiğinde veya bir confmagic.h dosya
zaten var.

kapat.Config_sh
Buradaki belgeyi sonlandırmak için son 'EOT' sembolünü tek başına bir satıra ekler
üreten yapı yapılandırma.sh dosyası.

prepend Hedefin içeriğini Hedef dosya bu dosya boş değilse.

ot Birimi ekler yapılandırma gibi eklemek komut verin, ancak bazı ek testler yapın
kaldırmak için '?sembol' ve '%sembol' satırları Hedef dosya eğer sembol
istenmiyor veya şartlı olarak istenmiyor. '%' formu yalnızca dahili olarak şu kişiler tarafından kullanılır:
metayapılandırma ' içinde kendi .U dosyalarını üretirken.MT'dizini.

Aynı eklemek gerçekten, ancak ek bir makro ikamesi gerçekleştirir. NS
kullanılabilir makrolar, Kablolu Makrolar paragraf.

Yan not olarak, metayapılandırma üretir -koşul koşullu ile başa çıkmak için dahili olarak komut
bağımlılıklar. Kendi başınıza kullanmamalısınız, ancak tararsanız göreceksiniz.
oluşturulan Makefile içinde .MT dizin.

Kablolu Makrolar
Aşağıdaki makrolar, aşağıdakiler tarafından tanınır: silme komut ve dahil edilmeden önce değiştirilir
yapılandırma:

Paketin temel revizyon numarası, .package.

Geçerli tarih.


Bu paketin sağlayıcısının e-posta adresi, sizden türetilen
.package.


Paketin adı, sizden türetilen .package dosyası.


Yama seviyesi metayapılandırma programı (kullanımdan kaldırıldı ).


SVN revizyon seviyesi metayapılandırma programı.

sürüm numarası metayapılandırma programı.

Bu makrolar esas olarak aşağıdakileri tanımlamak için kullanılır: metayapılandırma bir sürüm oluşturan bir
belirli yapılandırma komut dosyası ve hangi paket için yapıldığı. e-posta adresi
bakıcı, önde gelen talimatlara bağlı yapılandırma başladığında yazdırır.

Son metayapılandırma sürümler, formun çok daha genel bir sözdizimini anlar:

<$değişken>

Configure oluşturma zamanında değeri ile değiştirilir değişken senden alındı
.package dosya. Sonunda, eski kablolu makro biçimi kaybolacak ve <$baserev>
yerini alacak sağlanan tüm birimlerde.

Özel Birimler
Aşağıdaki özel birimler kodu çarpanlara ayırmak ve daha yüksek seviye sağlamak için kullanılır.
işlevsellikler. Ya kaynaklanabilen bir kabuk betiği ya da bir kabuk üretirler.
olabilecek değişken değerlendirmeed. Parametre geçişi, iyi bilinen değişkenler aracılığıyla yapılır.
$1, $2, vb. gibi adlandırılmış veya anonim (kabuk aracılığıyla kolayca ayarlanabilir) set
Şebeke). Ne zaman yapılandırma yürütür, yaratır ve bir UU dizin, yani her
üretilen komut dosyası orada bulunur ve paketinizdeki dosyalara müdahale etmez.

İşte bilmeniz gereken özel birimler ve bunları kullanmanın yolu.

Cppsym.U
Bu birim adında bir kabuk betiği üretir. Cppsymbelirlemek için kullanılabilir,
bir listedeki herhangi bir sembolün sahip olduğunuz C ön işlemcisi veya C derleyicisi tarafından tanımlanıp tanımlanmadığı
belirtildi. İçindeki semboller olsa da, herhangi bir sembolün durumunu belirleyebilir.
(özellik listesi) daha kolay belirlenir.

Csym.U
Bu, dahili olarak kullanılan $csym kabuk değişkenini ayarlar. yapılandırma olup olmadığını kontrol etmek için
verilen C sembolü tanımlanır veya tanımlanmaz. Tipik bir kullanım:

sembol sonucunu ayarla [-fva] [önceki]
değerlendir $csym

Bu ayarlayacak sonuç [-f] işlevi, [-v] değişkeni veya
dizi [-a] tanımlanır, aksi takdirde 'yanlış'. Bir önceki değer verilirse ve -r
anahtarı verildi yapılandırma (bkz yapılandırma Opsiyonlar paragraf), o zaman
değer sorgulanmadan yeniden kullanılır.

Bu hesaplamanın yapılma şekli, kullanıcının soruya verdiği cevaba bağlıdır.
yapılandırma gerçekleştirmesi gerekip gerekmediğini soracaktır. nm çıkarma veya çıkarma. Eğer
çıkarma yapıldıysa, ünite sembol listesine bakar, aksi halde
sürece, bir derleme-bağlantı testi gerçekleştirir -r daha önce hesaplanan yeniden kullanmak için verildi
değer, doğal olarak...

Son.U
Bu birimi özel dosyanıza kopyalayarak U dizin ve ekleme bağımlılıkları
? YAP: satırında, belirli bir birimi yüklemeye zorlayabilirsiniz. yapılandırma öyle olmasa bile
aksi halde istenir. Bazı birimler yalnızca yapılandırma bu taraftan.

Fileexp.U
Bu birim bir kabuk betiği üretir dosya ifadesi ile başlayan dosya adlarını genişletecek
tildeler. Tipik bir kullanım:

exp_name=`./fileexp $name`

genişletilmiş dosya adını atamak için deneyim_adı.

Findhdr.U
Bu birim üretir bulhdr başlık dosyalarını bulmak için kullanılan komut dosyası
$usrinc veya cpp yeteneklerini kullanan diğer yabancı yerler. Komut dosyası verilir
'stdio.h' veya 'sys/file.h' gibi dosya tabanı adını içerir ve tam yolunu döndürür
inlcude dosyası ve bulunursa sıfır durumu veya boş bir dize ve sıfır olmayan bir durum
dosya bulunamadıysa.

Getfile.U
Bu birim, bir dosya almak için kaynaklanması gereken bir miktar kabuk kodu üretir.
isimlendirin ve bazı akıl sağlığı kontrolleri yapın. İsteğe bağlı olarak, bir ~isim genişletmesi gerçekleştirilir.

Bu birimi kullanmak için, $rpm ve $dflt soruyu ve varsayılan yanıtı içermelidir;
olduğu gibi iletilecektir benimokuma komut dosyası (gelecekteki Okuduğum.U.) $fn
değişken işlemi kontrol eder ve sonuç döndürülür $ ans.

Bir dosya veya dizini bulmak için, içine 'f' veya 'd' koyun s~/. Bir '~' belirirse, o zaman ~isim
ikameye izin verilir. Bir '/' görünürse, yalnızca mutlak yol adları kabul edilir ve
~isim ikameleri, geri dönmeden önce her zaman genişletilir. '+' belirtilirse,
varlık kontrolleri atlanır. içinde 'n' görünürse $fn, daha sonra kullanıcının
"hiçbiri" cevabını verin.

Genellikle, taşınabilirlik için sormadığınız sürece, istendiğinde ~ad değiştirme gerçekleşir.
Bununla birlikte, taşınabilirliği atlamak ve onu zorlamak istediğiniz bazı zamanlar vardır.
ikame. Bunu yapmak için 'e' harfini (genişlet) kullanabilirsiniz.

Özel 'l' (bulma) türü kullanılıyorsa, o zaman $fn değişken bir ':' ile bitmelidir,
ardından bir dosya taban adı gelir. Cevap bir dizin ise, dosya taban adı
dosya varlığını test etmeden önce eklenir. Bu, konum belirleme tarzı sorularda kullanışlıdır
bunun gibi:

dflt='~haberler/lib'
: 'l' kullanıldığında 'd' veya 'f' belirtmeye gerek yok
fn='l~:etkin'
rp='Etkin dosya nerede?'
. ./dosyayı al
aktif="$ans"

Ek olarak, 'p' (yol) harfi, 'l' ile birlikte kullanılabilir.
dosyayı al içinde '/' olmayan bir cevabın kabul edileceği varsayılarak kabul edilmelidir.
bu değere ihtiyaç duyulduğunda herkesin PATH'inde olun.

Ayrıca, kabul edilmesi gereken cevapların bir listesini belirtme olasılığı da yararlıdır.
kelimesi kelimesine, tüm kontrolleri atlayarak. Bu liste parantez ve öğeler içinde olmalıdır
boşluk bırakılmadan virgülle ayrılmalıdır. alıntı yapmayı unutmayın
parantez kabuk için anlamlı olduğundan elde edilen dize. Örneğin:

dflt='/bin/kurulum'
fn='/fe~(kurulum,./kurulum)'
rp='Hangi yükleme programını kullan?'
. ./dosyayı al
kurulum = "$ans"

kullanıcının yalnızca mevcut dosyalara atıfta bulunan tam yolları belirlemesine izin verir,
ama yine de özel "install" ve "./install" yanıtlarına olduğu gibi izin verin (varsayarak
tabii ki bir şey onlarla daha sonra özel olarak ilgilenecek çünkü onlar
genel olarak beklenen çerçeveye uymuyor).

Sorunun cevabı 'yok' ise, varlık kontrolleri atlanır ve
boş dize döndürülür. Şu andan itibaren dosyayı al aramalar benimokuma dahili olarak, hepsi
ile kullanılabilen özellikler benimokuma için buraya başvurun.

Tamamen genişletilmiş bir değer gerekiyorsa (örneğin bir Makefile'de),
the $ansexp tarafından her zaman düzgün şekilde ayarlanan değişken dosyayı al genişletilmiş olarak
sürümü $ ans. Tabii ki, eğer buna izin vermediyseniz ~name genişlemeyecektir.
ilk sırada $fn değişkeni.

Inhdr.U
Bu birim üretir $inhdr tarafından dahili olarak kullanılan kabuk değişkeni yapılandırma kontrol etmek
bir başlık kümesinin var olup olmadığı. Tipik bir kullanım:

başlığı ayarla i_header [ başlık2 i_header2 ... ]
değerlendir $inhdr

Bu, başlığın bulunup bulunmadığını söyleyen bir mesaj yazdıracak ve
i_header göre değişkendir. Birden fazla başlık belirtilmişse ve ilk
başlık bulunamazsa, liste boşalana veya bir tane bulunana kadar bir sonrakini deniyoruz.

Inlibc.U
Bu birim üretir $inlibc tarafından dahili olarak kullanılan kabuk değişkeni yapılandırma kontrol etmek
Belirli bir C fonksiyonunun tanımlanıp tanımlanmadığı. Tipik bir kullanım:

işlevi ayarla d_func
değerlendir $inlibc

Bu, fonksiyonun bulunup bulunmadığını ve ayarlanıp ayarlanmadığını söyleyen bir mesaj yazdıracaktır.
$d_func buna göre. Dahili olarak, kullandı $csym rutin.

Loc.U
Bu önemli birim bir kabuk betiği üretir loc nerede olduğunu bulmak için kullanılabilir
dizinler listesinde belirli bir dosya bulunur. İlk argüman dosyayı belirtir
ikinci argüman, arama başarısız olursa döndürülecek olandır ve
kalan argümanlar, dosyanın aranacağı dizinlerin bir listesidir. İçin
örnek:

dflt=`./loc sendmail.cf X / USR / lib /var/lib/sendmail / lib`

ayarlayacaktı $dflt için X Eğer hayırsa mail.cf dosya listelenen dizinlerin altında bulundu,
ya da benzeri /usr/lib/sendmail.cf bazı sistemlerde. Ayrıca bakınız Getfile.U.

MailYazar.U
yapmak için bu birimin kendi özel End.U'nuzun ?MAKE: satırına dahil edilmesi gerekir.
içine yapılandırma. Kullanıcıya isteğe bağlı olarak kendisini yazara kaydettirmesini sağlar.
yeni yamalar geldiğinde bilgilendirilme veya yayınlandığında bunları otomatik olarak alma.
Yüklemeniz gerekir postacı Bunu yapmak için (en azından sürüm 3.0).

PostaListesi.U
yapmak için bu birimin kendi özel End.U'nuzun ?MAKE: satırına dahil edilmesi gerekir.
içine yapılandırma. Kullanıcıya bir posta listesine abone olma veya abonelikten çıkma imkanı sunar.
paketle ilgili tartışmaların yapıldığı yer. koşman gerek paket
ve uygun değişkenleri ayarlamak için posta listesiyle ilgili soruları yanıtlayın.
.package Bu ünite faaliyete geçmeden önce.

Myinit.U
Bu birimi özel dosyanıza kopyalayın U bazılarına kendi varsayılan değerlerinizi eklemek için dizin
iç değişkenler. Bu birim yüklenir yapılandırma tüm varsayılanlardan sonra
başlatma işlemleri yapılmıştır.

Okuduğum.U
Bu birim üretir benimokuma yapmak için kaynaklanması gereken kabuk betiği
okuman. Kabuk çıkışlarına, varsayılan atamaya ve parametre değerlendirmesine izin verir.
Instruct.U biriminde belgelenmiştir. Ayrıca dinamik ayarına izin verir. -d seçeneği
komut dosyasının geri kalanı için kullanılacaktır.

Bu birimi kullanmak için, $rpm soruyu tutmalı ve $dflt varsayılanı içermelidir
Cevap. Soru, komut dosyasının kendisi tarafından yazdırılacak ve sonuç döndürülecek
içinde $ ans değişkeni.

İşte tipik bir kullanım:

dflt='y'
rp='Soru?'
. ./okudum
değer="$an"

Daha fazla bilgi için ünitenin kendisine bakın.

Eskiconfig.U
Bu birim, bağımlılığınızın bir parçası olmalıdır? YAP: bazı birimleriniz denediğinde satırı
eski bir sembol değerini yeniden kullanmak için. Bu birim eski cevapları almaktan sorumludur.
itibaren yapılandırma.sh veya belirli bir platformda çalışırken yararlı ipuçları sağlamak
İlk kez. Bkz. yapılandırma İpuçları ipuçları hakkında daha fazla bilgi için paragraf.

Önek.U
Bu birimin amacı, kurulum önek dizinindeki değişiklikleri tespit etmektir.
önceki yanıtlardan otomatik olarak uygun varsayılanları yeniden hesaplayın. Şuna dayanır:
değeri $eskiönek olduğunda önceki önek dizinini tutan değişken
değiştirilmiştir ve aksi halde boştur. Örneğin, önek değiştirildiyse / opt için
/ Yerel / usr, ardından önceki ikili kurulum dizini değiştirilecektir.
/seç/bin için / Usr / local / bin, ya da öyle olsaydı değişmeden kalacak, diyelim ki, /çöp Kutusu.

araman gerek set yayınlamadan önce değerlendirme on $ön ek, Örneğin:

dflt var [dir] ayarla
eval $ön eki

hangi ayarlayacak $dflt için $ var or $önek/dizin ön ekin kalıp kalmadığına bağlı olarak
aynı ya da değil. Eğer dir dize mi Yok, içinde tek bir boşluk değeri $dflt olarak tutulur-
önek değişse bile. Eğer dir atlanır, o zaman $dflt boş olarak ayarlandı
önek değiştiyse dize $ var aksi takdirde.

Ön ek.U
Bu birimin amacı, Prefixit.U'nunkine benzer, yani
önek değişikliklerine uyum sağlamak için varsayılan dize. Ancak, kabuk değişkeni $ön ek,
değerlendirildiğinde, yalnızca ~ad genişletmelerini geri yükler, önek böyle bir kaçış kullanmalı
mekanizma. Şu şekilde kullanın:

dflt'yi ayarla
eval $ön eki

aracılığıyla sormadan önce dosyayı al Örneğin. Önek ~name kullanmıyorsa
genişleme, o zaman yukarıdakiler y değişken, doğal olarak.

Typedef.U
Bu birim üretir $typedef tarafından dahili olarak kullanılan kabuk değişkeni yapılandırma kontrol etmek
typedef'in var olup olmadığı. Tipik bir kullanım:

typedef val_t varsayılanını ayarla [içerir]
değerlendir $typedef

Bu değişkeni ayarlayacaktır val_t değerine varsayılan typedef bulunamadıysa
listelenen dosyalar arasında veya typedef Eğer bulunursa. Dahil etme dosyaları yoksa
belirtilen, birim bakar bir tek. Bazı içermeleri belirtirseniz, yalnızca
bunlara bakılır.

Unix.U
Bu ünitenin amacı, değişkenler aracılığıyla en yaygın UNIX-izm'lerden bazılarını tanımlamaktır.
komut satırından veya uygun ipucu dosyaları aracılığıyla değiştirilebilir. Özellikle,
$_exe, $_o ve $_a ayarlanır. Tüm birimler başvurmalıdır $_o ve yapmamak .o direkt olarak.
'.' bu değişkenlerin bir parçasıdır.

Setvar.U
Bu birim, dahili olarak kullanılan değişkeni üretir. yapılandırma ayarlamak
tanımlamak/undef değeri, belirli bir sembole, aniden değiştiğinde bir uyarı verir
önceki bir değerden. Örneğin:

val="$tanımla"
d_variable'ı ayarla
değerlendir $setvar

eğer önceki $d_değişken değer boş değildi ve $ değer farklı, bir "oha"
uyarı verilir.

Vay.U
Bu birim üretir çüş olduğunda bir uyarı veren komut dosyası değer değişkende
kimin adı $ var tutulan eski değeri ile aynı değildir $ oldu. üzerine
dönüş, $td ve $ tu uygun değeri tutmak tanımlamak or tanımsız değişken. Görmek
örnekler Inlibc.U.

Yerleşik ön işlemci
Dahil edilecek her birim yapılandırma yerleşik bir ön işlemci aracılığıyla çalıştırılır. ön-
işlemci ifadeleri '@' karakteriyle tanıtılır ('#' kabuk yorumudur
karakter). Yalnızca C ön işlemcisinin yaptığı gibi çalışır, ancak kabuk ve perl'e izin verir.
kaçar. Kullanılabilir işlevler şunlardır:

@Eğer ifade
If ifade doğruysa, @end, @elsif veya @else'ye kadar kodu yüklemeye devam edin.

@elsif ifade
Alternatif seçim. Eğer ifade true, kodu @end'e kadar yüklemeye devam edin,
başka bir @elsif veya @else.

@else Eğer @if ise yüklenecek varsayılan kod ifade yanlıştı ve hiçbiri
isteğe bağlı @elsif eşleşti. @Sonuna kadar yükle.

@end @if tarafından açılan koşullu yükleme ifadesini kapatın.

@tanımlamak sembol
Ön işlemciye şunu söyler: sembol itibaren tanımlanmıştır.

koşullu ifade sembol adlarını içerebilir (sembol isteniyorsa değer doğrudur veya
üzerinden tanımlandı @tanımlamak veya kabuk/Perl kaçar. Bu atomlar kullanılarak birleştirilebilir
geleneksel boole operatörleri '!' olumsuzlama için, '&&' mantıksal ve '||' mantıklı
ya da.

Tek parantez içine alınmış metin bir kabuk testidir, çift parantez arasındaki metin ise
bir perl testi. Yani ifadeler:

{ kabuk metin }
{{ perl metin }}

şu dile çevrilir:

if kabuk metin >>dev/null 2>&1; sonra 0'dan çıkın; başka çıkış 1; fi
(Eğerperl metin) {çıkış 0;} başka {çıkış 1;}

ve çıkış durumu, bir boole değeri elde etmek için standart şekilde kullanılır, yani 0 doğrudur ve
diğer her şey yalan. Şuna kadar perl'de yalnızca basit koşulların ifade edilebileceğine dikkat edin:
içine bazı karmaşık kodlar yüklenebilir metayapılandırma ve idam edildi.

Yerleşik ön işlemci, bazı birimlerin ince ayarını yapmak için kullanılabilir (bkz. d_gethname.U Bir için
karmaşık örnek) program veya dosyalar tarafından fiilen kullanılan sembollere bağlı olarak
dağıtımda bulunur. Örneğin, Eskiconfig.U gibi bir test kullanır:

@if {test -d ../ipuçları}

ve yapılandırma yalnızca varsa ipucuna bağlı kod içerecektir. ipuçları dizinde
paketin en üst düzey dizini. Testlerin ' içinden çalıştırıldığını unutmayın..MT' dizini,
dolayısıyla testte gerekli '../'.

Ön işlemci, bir sembol olmadığında gereksiz kod koymaktan kaçınmak için de kullanılabilir.
tanımlı. Birden fazla sembol tanımlayan birimler bu şekilde korunabilir (birim
bir bütün olarak yüklenir) bir @if/@end çifti içinde sembole bağlı kod toplayarak. İçin
örnek:

@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='doğru'
@Başka
need_time_h='yanlış'
@son

kaynak kodunun kontrol eden üç sembolden birini kullanıp kullanmadığını test eder.
the zaman.h or sistem/zaman.h dahil edin ve kabuk sembolünü buna göre tanımlayın. bu verir
yapılandırma kaynakların neye ihtiyaç duyduğuna dair bir geri bildirim ve düzeltmenin dezavantajından kaçının
donmuş birimler

'?W:' satırları aracılığıyla, ilginç kombinasyonlar elde edebilirsiniz. Örneğin, i_time.U birim
C kaynaklarının herhangi bir şekilde kullanıp kullanmadığını bilmesi gerekir. yapı timezone tip. Öyleyse,
çizgi:

?W::saat dilimi

sembolü tanımlamanın yan etkisi için kullanılır timezone ön işlemci için bu
birim kodu daha sonra şunu söyleyebilir:

@if saat dilimi
'-DS_TIMEZONE' '' içindeki s_timezone için; yapmak
@Başka
s_timezone=''
@son

... s_timezone kullanarak kod ...

@if saat dilimi
yapılmış
@son

ve art arda iki değeri deneyen ekstra bir döngüye sahip olun s_timezone değişken, ancak yalnızca
gerekirse.

Eski Semboller
Eski semboller ile geçişi kolaylaştırmak için eski semboller korunur metayapılandırma birimler. Meğer ki
the -o geçiş yapılır metayapılandırma göz ardı edilecekler. Ancak, bir Eski dosya olacak
hangi dosyaların bu eski sembolleri kullandığını ve hangi dosyaların
kullanılacak yeni sembollerdir.

Eski sembollerin ömrü tam bir revizyondur, yani
sonraki temel revizyon yayınlanır (yama güncellemeleri elbette sayılmaz). Bu nedenle,
Kaynaklarınızı tercüme etmeniz ve yeni sembolleri en kısa sürede kullanmaya başlamanız akıllıca olacaktır.

yapılandırma İpuçları
Dahili yapılandırma mantığının yanlış seçimler yapması olabilir. İçin
örneğin, bazı platformlarda, vfork() sistem çağrısı mevcut ancak bozuk, bu yüzden
kullanılamaz. Bu bilgiyi birimlerin kendi içine almak mümkün değildir, çünkü
bu, satıcının sonunda çözeceği geçici bir sorun olabilir veya
yeni bir işletim sistemi yükseltmesi ile tanıtıldı.

Her neyse, sisteme çok özel olan tüm bu küçük problemler için, metayapılandırma
ipucu dosyaları desteği sağlar. Kullanmak için bir oluşturmanız gerekir. ipuçları dizinde
paketin en üst düzey dizini ve çalıştırdığınızda buna sahip olun metayapılandırma. Bu yükleyecek
ipucu ile ilgili kısım Eskiconfig.U.

O andan itibaren, bazı kabuk değişkenlerini önceden ayarlayabilirsiniz. yapılandırma işletim sistemine özgü bir kullanımda
.sh dosyası. içinde kod var Eskiconfig.U hangi ipucu dosyalarının gerekli olduğunu tahmin etmeye çalışan
sistem işletim sistemi adına, çekirdek adına, sürüme dayalı standart bir ad hesaplama
numara, vb... Bu bilgi hızla değişeceği için belgelemiyorum
burada. Kodun tersine mühendislik işlemi yapmanız gerekir. Eskiconfig.U.

Paketinizi ilk yayınladığınızda, ipuçları dosya dizininiz boş olmalıdır. Eğer
paketinizin kullanıcıları sorun yaşadıklarından şikayet ediyor yapılandırma varsayılanlar
belirli bir sistem, bunun platforma özgü bir sorun mu yoksa bir sorun mu olduğunu görmelisiniz.
genel bir. İlk durumda, yeni bir ipucu dosyası sunmanın zamanı geldi.
ikinci olarak, ilgili birim revize edilmelidir.

Örneğin, SGI sistemlerinin bozuk olduğu bilinmektedir. vfork() sistem çağrısı, bundan böyle
yazı. Ve karşılık gelen ipucu dosya adı sgi.sh. Yani tek yapmanız gereken oluşturmak
a ipuçları/sgi.sh yazdığınız dosya:

d_vfork="$tanımla"

hangi her zaman yeniden eşleşecek vfork on çatal (görmek d_vfork.U). için SGI sistemlerinde çalışırken
İlk kez, yapılandırma olduğunu tespit edecek ipuçları/sgi.sh dosya ve üzerinde bulunduğumuz
bir IRIX makinesi (çekirdek adı genellikle /irix'tir), bu nedenle sgi bir şekilde
olası ipucu. Kullanıcı kabul ederse ve $d_vfork değeri ile değiştirilir
$setvar çağrı, bir çüş! değeri geçersiz kılmak üzere olduğumuz konusunda uyarmak için gönderilecek
tarafından hesaplanan yapılandırma.

sağlamanız gerekmediğini unutmayın. herşey tarafından bilinen ipuçları Eskiconfig.U. Bir ipucu dosyası ise
eksikse, olası bir seçim olarak önerilmeyecektir. Sezgisel testler hesaplamak için koştu
olası ipucu adayları lapa lapa. Yeni değerleriniz veya farklı testleriniz varsa lütfen
onları bana gönder...

ağır basan Seçimleri
Eğer bir yapılandırma bitti en üst düzey dizindeki dosya, yapılandırma sana soracak mı
varsayılan değerleri geçersiz kılmak için yüklemek istiyorsanız. Bu, yaratılmadan önce yapılır.
yapılandırma.sh dosya, böylece orada depolanan değerleri yamalama şansı verir.

Bu, yerel bir dosya olması bakımından ipuçları yaklaşımından farklıdır.
kendi kullanımı için oluşturmakta özgürdür. Böyle bir dosyayı kendiniz sağlamamalısınız, ancak
kullanıcı bu olasılığı biliyor.

yapılandırma Opsiyonlar
The yapılandırma komut satırında belirtilen bazı seçeneklerle komut dosyası çağrılabilir,
davranışını biraz değiştirin. İzin verilen seçenekler şunlardır:

-d Tüm cevaplar için varsayılanları kullanın.

-e Geçmişi sorgulamadan devam edin yapılandırma.sh.

-f dosya Belirtilen dosyayı varsayılan yapılandırma olarak kullanın. Bu anahtar kullanılmazsa,
yapılandırma alınır yapılandırma.sh, mevcut olduğunda.

-h Yardım mesajını yazdırın ve çıkın.

-r Mümkünse C sembol değerini yeniden kullanın. Bu, maliyeti atlayacak nm sembol
çıkarma. İlk kez kullanılıyorsa (önceki yapılandırma dosyası olmadan),
yapılandırma hakkında bilgi sahibi olmak için küçük bir programı derlemeye ve bağlamaya çalışacaktır.
bir sembolün varlığı veya yokluğu.

-s Sessiz mod. Yalnızca dosya tanıtıcısı #4'te yazdırılan dizeler ekranda görülecektir.
ekranı (önemli mesajlar budur). tamamen kapatmak mümkün değil
herhangi bir çıktı, ancak kullanabilirsiniz 'yapılandırma -dersler > / dev / null 2> & 1'dolu olmak
çıktı ve kullanıcı etkileşimi gerektirmeyen toplu çalıştırma.

-D sembol=değer
önceden tanımlar sembol belirtilenleri taşımak değer. ' kullanmak da mümkündür.-D
sembol' varsayılan bir 'tanımla' değeri kullanacak.

-E Bir soru ürettikten sonra, yapılandırma sorularının sonunda durun.
yapılandırma.sh. Bu herhangi bir performans göstermez'yapmak bağlı' veya .SH dosyalarının çıkarılması.

-K Bilgili kullanıcı. Bu seçeneği kullandığınızda, ne yaptığınızı bilirsiniz ve
bu yüzden yapılandırma.sh dosya her zaman amaçlanmış gibi ele alınacaktır.
bir uzaylı sisteminde oluşturulmuş olsa bile yeniden kullanılabilir. Ayrıca
ne zaman iptal etmeyi önler yapılandırma kullanılamaz bir C derleyicisi veya yanlış bir küme algılar
bayrakları kümesi. Bu seçenekle başka kısayollar da açılabilir.
gelecek. Bu seçenek şu belgede belgelenmiştir: yapılandırma bize hatırlatmak için kullanım mesajı
varlığı hakkında, ancak verilen açıklamanın yeterince şifreli olması umulmaktadır.
:-)

-O Bir aracılığıyla belirtilen değerlere izin ver -D or -U herhangi bir yüklenenden ayarları geçersiz kılmak için
yapılandırma dosyası. Geçersiz kılma olacağından bu varsayılan davranış değildir.
şu anda değiştirdiğiniz değişkenlerden türetilen değişkenlere yayılmamalıdır.
Doğal olarak, olmadan -O, ayar yalnızca hiçbir yapılandırma dosyası olmadığında yapılır.
türev değişkenler henüz hesaplanmadığından güvenli olan yüklendi...

-S Tüm .SH dosyalarında değişken değiştirme gerçekleştirin. ile birleştirebilirsiniz.
-f istediğiniz herhangi bir yapılandırmayı yaymak için geçiş yapın.

-U sembol=
ön ayarlar sembol boş bir değer taşımak için. ' kullanmak da mümkündür.-U sembol'
hangi ayarlayacak sembol 'çözmek' için.

-V sürüm numarasını yazdırın. metayapılandırma bunu yaratan yapılandırma senaryo
ve çıkış.

Koşu çevre
Başladıktan sonra, yapılandırma yerel oluşturur UU dizin ve oradan çalışır. Rehber
Configure sona erdiğinde kaldırılır, ancak bu, komut dosyasını bir yerden çalıştırmanız gerektiği anlamına gelir.
yazabilirsiniz, yani salt okunur bir dosya sisteminden yazamazsınız.

Koşabilirsin yapılandırma uzaktan olsa da, olduğu gibi:

../package/Yapılandır

yerel olarak mevcut olmayan kaynakları yapılandırmak için. Oluşturulan tüm dosyalar konulacak
betiği çalıştırdığınız dizin. Bu sihir src.U sayesinde yapılır.
ayarlayan birim, $kaynak ve $rsrc paket kaynaklarına işaret etmek için değişkenler. o
yol, tam veya göreli olup olmamasına bağlı olarak yapılandırma tam veya aracılığıyla çağrıldı
göreceli yol.

İçinden UU alt dizini kullanabilirsiniz $rsrc kaynak dosyalara erişmek için (birimler
kaynak dosyalara atıfta bulunarak bağlantı ipuçları her zaman bu mekanizmayı kullanır ve
dosya üst dizinde bulunur). Tüm Makefile dosyaları $src değişkenini kullanmalıdır.
derleme dizininin en üstündeki kaynaklara bir işaretçi olarak (burada yapılandırma çalıştırılır),
doğrudan veya bir VPATH ayarı aracılığıyla.

Çalışırken yapılandırma uzaktan, .SH dosyaları derleme dizininde ayıklanır,
kaynak ağacında. Ancak, bir tür yapmak derlemek için destek
şeyler bir yapı dizinindeyken, kaynaklar başka bir yerde bulunur.

kullanma sihirli yeniden tanımlamalar
Kullanarak -M geçiş, bazı sihirli yeniden eşlemeler bir confmagic.h
dosya. Bu dosyanın daha sonra dahil edilmesi gerekiyor yapılandırma.h, elbette, ama aynı zamanda tüm bunlardan sonra
diğer gerekli dosyaları içerir. Yani:

#include "config.h"
...
... diğer kalıntılar ...
...
#include "confmagic.h"

Tipik, confmagic.h yeniden eşlemeye çalışacak kopyala() on memcpy() Eğer hayırsa kopyala() is
yerel olarak kullanılabilir veya dönüştürülebilir vfork içine çatal gerektiğinde, bu nedenle işe yaramaz hale
hakkında rahatsız HAS_VFORK sembolü.

Bu yapılandırma büyüsü, Sözlük dosyasında belgelenmiştir.

birim Şablonlar
içinde bir dizi birim şablonu vardır. metayapılandırma amaçlanan kaynak dizin
(henüz yazılmamış) bir program tarafından çeşitli türler için hızlı bir şekilde yeni birimler üretmek için kullanılabilir.
durumlar. Bu bitmemiş proje için belge yok, ama bundan bahsetmeyi düşündüm.
Kendiniz yapmak ve daha sonra katkıda bulunmak istemeniz durumunda kılavuz sayfasında...

YAZARLAR


Larry Duvarı[e-posta korumalı]> sürüm 2.0 için.
harlan stenn[e-posta korumalı]> önemli birim uzantıları için.
Raphael Manfredi[e-posta korumalı]>.
Diğer birçok katkıda bulunanlar metayapılandırma birimler. Bir liste için kredi dosyasına bakın.

onworks.net hizmetlerini kullanarak metaconfig'i çevrimiçi kullanın


Ücretsiz Sunucular ve İş İstasyonları

Windows ve Linux uygulamalarını indirin

Linux komutları

Ad