Angielskifrancuskihiszpański

Ad


Ulubiona usługa OnWorks

metaconfig - Online w chmurze

Uruchom metaconfig w bezpłatnym dostawcy hostingu OnWorks w systemie Ubuntu Online, Fedora Online, emulatorze online systemu Windows lub emulatorze online systemu MAC OS

To jest polecenie metaconfig, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS

PROGRAM:

IMIĘ


metaconfig - generator skryptów konfiguracyjnych

STRESZCZENIE


metakonfiguracja [-dhkmostvwGMV ] [ -L reż ]

OPIS


Metakonfiguracja to program generujący skrypty Configure. Jeśli nie wiesz co
Skonfiguruj skrypt, przejdź do SEMINARIUM część tej strony podręcznika. Jeśli chcesz
pełny (formalny) opis sposobu użycia metakonfiguracja i jego jednostki, spójrz na
REFERENCE Sekcja. Poniżej znajduje się krótkie wprowadzenie i odniesienia dla osób posiadających wiedzę
użytkowników.

Metakonfiguracja działa z zestawu jednostek które definiują wszystko, o czym wie metaconfig
ruchliwość. Każda jednostka jest samodzielna i nie musi być nigdzie rejestrowana
inaczej niż poprzez włączenie do publicznego katalogu U lub prywatnego katalogu U. Jeśli
pakiet dist (którego częścią jest metaconfig) jest instalowany w LIB, następnie publiczny U
katalog to LIB/dist/mcon/U. Na tym komputerze katalog LIB to /usr/share/dist. Twój
prywatny katalog U, jeśli taki posiadasz, znajduje się w katalogu najwyższego poziomu pakietu.
Zanim będziesz mógł biegać metakonfiguracja musisz zrobić kilka rzeczy:

· Utwórz plik .package w katalogu najwyższego poziomu pakietu, uruchamiając go pakinit.
Ten program zapyta Cię o Twoją paczkę i zapamięta, co jej powiesz, aby to zrobić
wszystkie programy dis mogą być inteligentne.

· Zajrzyj do Słownika (w LIB/dist/mcon) i napisz swoje skrypty powłoki i programy w C
pod względem symboli, które metaconfig wie, jak zdefiniować. Nie musisz mówić
metaconfig, jakich symboli użyłeś, ponieważ metaconfig to dla ciebie rozwiąże.

· Wygeneruj dowolne skrypty .SH potrzebne do napisania plików Makefile lub skryptów powłoki, w zależności od tego
na wartościach zdefiniowanych przez Configure. Jest program tzw zrobićSH to ci pomoże
przekonwertuj zwykły skrypt na szablon script.SH; nadal będzie wymagana pewna edycja
wykonywane na wynikowym pliku .SH w celu przeniesienia części konfiguracji zmiennej do pliku
górna część skryptu (zobacz komentarze wbudowane wygenerowane przez zrobićSH w twoim .SH
plik).

· Utwórz plik MANIFEST.new w katalogu najwyższego poziomu, który będzie zawierał listę wszystkich plików
Twój pakunek. Ten plik pozostanie prywatny i nie będzie częścią wersji ostatecznej
dystrybucja. (Dla wygody plik MANIFESTU będzie używany przez metakonfiguracja if
nie ma jeszcze pliku MANIFEST.new.) Nazwa pliku powinna być pierwszym polem każdego pliku
linia. Po spacji możesz dodać krótki komentarz opisujący Twój plik. Tylko
powinny się tam znajdować pliki źródłowe. Specjalny plik poziom patcha.h (który jest
obsługiwane i utrzymywane przez narzędzia do łatania - patrz klepnięcie(1)) powinna być częścią
MANIFEST.new, ale niektóre narzędzia mogą go po cichu zignorować. Jako zasada,
powinny być tam wymienione tylko pliki utrzymywane przez RCS, plik poziom patcha.h plik jest
jeden ważny wyjątek.

· Opcjonalnie możesz chcieć utworzyć plik MANIFESTU, który będzie wersją wyeksportowaną
Twojego MANIFESTU.new. Plik ten musi stanowić część wydania, tj. być wymieniony w obu wersjach
twój MANIFEST.new i sam MANIFEST. Jeden z metakonfiguracja jednostki o tym wiedzą
plik i wymusi na programie Configure sprawdzenie wersji, sprawdzając, czy wszystkie pliki są dostępne
wymienione tam stanowią część dystrybucji. Pliki MANIFEST i MANIFEST.new powinny
być odrębne, a nie linki.

· Skopiuj wszystkie pliki .U, które chcesz zmodyfikować, do swojego prywatnego katalogu U. Dowolne pliki .U
w twoim prywatnym katalogu U będzie używany zamiast tego w publicznym U
informator. Na przykład jednym ze sposobów wymuszenia włączenia dowolnej jednostki jest skopiowanie pliku End.U
plik do katalogu .U i dodaj nazwę jednostki, od której chcesz być zależna
koniec linii ?MAKE:. Niektóre jednostki można zmusić TYLKO w ten sposób, a mianowicie
postacie Warn_*.U i Chk_*.U. Możesz także dostosować niektóre ustawienia domyślne
Skonfiguruj zmienne, kopiując plik Myinit.U do prywatnego katalogu U pakietu i
ustawienie zmiennych w tej jednostce.

Teraz jesteś gotowy do biegu metakonfiguracja. To stworzy Konfigurowanie plik i opcjonalnie a
konfiguracja_h.SH plik (jeśli Twoje źródła korzystają z symboli C). Wygenerowane pliki będą
w razie potrzeby automatycznie dodany do pliku MANIFEST.new. Nie zapomnij zaktualizować swojego
Jednak plik MANIFESTU.

Aby utworzyć nowe jednostki, wykonaj następujące czynności:

· Skopiuj podobną jednostkę do nowego pliku .U. Imię, które wybierzesz, powinno być imieniem a
zmienną generowaną przez urządzenie, chociaż jest to dla Ciebie tylko wygoda, a nie a
wymóg. Powinno mieć 12 lub mniej znaków, aby zapobiec obcinaniu nazw plików.
Właściwie powinno to być prawdopodobnie 10 lub mniej, aby ci, którzy chcą korzystać z RCS, mogli to mieć
a .U,v na końcu bez przecinania. Metaconfig używa wielkości pierwszej litery do
określ, czy ta jednostka faktycznie wytwarza jakąkolwiek zmienną, więc nie pisz wielką literą
nazwa jednostki, jeśli ma ona generować zmienną powłoki.

· Edytuj nowy plik .U, aby zrobić, co chcesz. Pierwsza linia ?MAKE: wskazuje
zależności; przed końcowym dwukropkiem listy wszystkie zmienne zdefiniowane przez tę jednostkę, oraz
po ostatnim dwukropku wszystkie zmienne (lub inne jednostki), od których zależy ta jednostka.
Bardzo ważne jest, aby listy te były dokładne. Jeśli zależność jest opcjonalna i a
można użyć wartości domyślnej, należy poprzedzić zależność znakiem „+”. The
odpowiednia jednostka nie zostanie załadowana do obliczenia symbolu, chyba że jest to naprawdę wymagane
przez inną jednostkę.

· W miarę możliwości sparametryzuj swoją jednostkę w oparciu o zdefiniowaną zmienną powłoki
?INIT: linie. Spowoduje to przeniesienie definicji zmiennych do jednostki Init.U, gdzie
można je zastąpić definicjami w Myinit.U, który znajduje się po Init.U.

· Dodaj definicję dowolnych symboli C jako ?H: linie. Linia rozpoczynająca się od
?H:?%<: w pliku .U zostanie dodany do ewentualnego pliku config.h wtedy i tylko wtedy, gdy
metaconfig zdecyduje, że ta jednostka jest potrzebna. %< oznacza nazwę jednostki,
która jest również nazwą pliku (bez .U), jeśli zastosowałeś
Konwencja. Zawsze umieszczaj komentarz pod każdą linią ?H: w przypadku jednej ze zmiennych
podstawienia znajdujące się wcześniej w wierszu rozpoczynają komentarz bez jego kończenia. Dowolna skorupa
zmienna zaczynająca się od d_ może to zrobić, więc uważaj. Jeśli pominiesz ?%<:, to
metaconfig spróbuje wyczuć symbol, którego definicja jest potrzebna przed jakimkolwiek
włączenie do config.h.

· Dodaj definicje słownika jako ?S: linie dla zmiennych powłoki i ?C: linie dla C
zmienne preprocesora. Przykłady można znaleźć w aktualnej jednostce. Jest to BARDZO ważne
rozpoczynaj każdy wpis nazwą z symbolem wyrównanym do lewej i kończ każdy wpis znakiem ?C:. Lub
?S:. linia. Algorytm, który tłumaczy wpisy symboli preprocesora C dla
Od tego zależy słownik komentarzy do config.h.

· Upewnij się, że wszystkie Twoje ? linie mają rację. Prawidłowa kolejność to:

?RCS: i ?X: w zasadzie tylko komentarze
?MAKE: zależności metaconfig
?Y: dyrektywa dotycząca układu jednostki
?S: słownik definicji powłoki
?C: słownik definicji C
?H: definicje config.h
?M: definicje confmagic.h
?W: poszukiwane symbole
?V: widoczne symbole
?F: pliki utworzone przez to urządzenie
?T: użyte tymczasowe symbole powłoki
?D: opcjonalna wartość domyślna zależności
?O: używane do oznaczania przestarzałych jednostek
?LINT: wskazówki metalintowe
?INIT: inicjalizacja symboli powłoki

Oto przykład pokazujący kolejność linii i różne dozwolone formaty:

?RCS: $Identyfikator RCS$
?RCS: Informacje o prawach autorskich
?RCS: $RCS-Log$
?X:
?X: Wymyślony przykład
?X:
?MAKE:d_one dwa: trzy + cztery Pięć
?MAKE: -pick dodaj $@%
?T: DOMYŚLNY
?S:d_jeden:
?S: Pierwszy symbol powłoki, warunkowo definiuje JEDEN.
?S:.
?S:dwa:
?S: Symbol drugiej powłoki, wartość dla DWÓCH.
?S:.
?STOŻEK:
?C: Pierwszy symbol C.
?C:.
?C:DWA:
?C: Drugi symbol C.
?C:.
?H:#$d_one JEDEN /**/
?H:#zdefiniuj DWA "$dwa"
?H:#$d_one ONE_TWO "$dwa"
?H:.
?M: odwróć: HAS_FLIP
?M:#ifndef HAS_FLIP
?M:#definiuj flip(x) flop(x)
?M:#endif
?M:.
?W:%<:jeden_dwa
?V:p_one p_dwa:p_trzy
?F:plik ./ftest !tmp
?T:tmp zm
?D:dwa='undef'
?LINT:zmień trzy
?INIT:dwa_init='2'
: następuje kod powłoki implementujący jednostkę
p_one='jeden'
p_two='dwa'
p_trzy=""

Powtórzę to jeszcze raz: powyższa definicja jednostki to a imitacja jeden, aby tylko pokazać
różne możliwości. Taka jednostka i tak nie miałaby większego sensu... Trochę więcej
zaawansowane funkcje nie są tutaj opisane. Proszę odnieść się do REFERENCE sekcja po więcej
pełna informacja.

· Umieść urządzenie w publicznym lub prywatnym katalogu U, stosownie do potrzeb.

· Uruchom ponownie metakonfiguracja.

· Wyślij swoje urządzenie do [email chroniony] (Raphael Manfredi) do włączenia do egzemplarza wzorcowego,
jeśli uważasz, że jest to w interesie ogółu.

Aby dodać nowy program do lokalizacji:

· Edytuj Loc.U i dodaj nazwę programu w linii ?MAKE: (między
dwa dwukropki) i albo do loclist, albo trylist (w zależności od tego, czy program jest
obowiązkowe lub nie).

· Uruchom ponownie metaconfig.

· Wyślij do mnie swoje urządzenie w celu włączenia go do kopii wzorcowej, jeśli uważasz, że jest to ogólne
procentowych.

Uwagi dotyczące zapisu plików .U:

* Zawsze używaj "rm -f", ponieważ istnieją systemy, w których rm jest domyślnie interaktywny.

* Nie używaj „set -- …”, ponieważ „--” nie działa z każdą powłoką. Użyj „ustaw x…;
zmiana".

* Nie używaj opcji „unset ENV”, ponieważ funkcja unset nie jest w pełni przenośna. Zamiast tego powiedz „ENV=''”.

* Zawsze używaj echo " " (ze spacją) ze względu na systemy Eunice.

* Jedynym zastosowaniem test z -r, -w, -f lub -d, ponieważ są to jedyne przełączniki przenośne. W
w szczególności unikaj „testu -x”.

* Używaj wyłącznie programów dostarczonych z wersją V7, aby mieć pewność, że każdy je ma.

* Użyj $contains, jeśli chcesz grep warunkowo, ponieważ nie wszystkie grepy zwracają a
rozsądny stan. Pamiętaj, aby przekierować dane wyjściowe do /dev/null, używając „>/dev/null
2>&1'.

* Użyj „if test” zamiast „if [...]”, ponieważ nie każdy sh zna tę drugą konstrukcję.

* Użyj skryptu myread dla danych wejściowych, aby mogli wykonywać ucieczki powłoki i ustawienia domyślne
ocena. Ogólna forma jest

przypadek „$grimble” w
'') dflt=452;;
*) dflt="$grimble";;
to C
rp='Ile masz grymasów?'
. ./mojczytaj
grimble="$ans"

* Użyj skryptu getfile, prosząc o nazwę ścieżki pliku, aby mieć opcjonalną
~kontrole rozwijania nazw i poprawności działania. Pełny opis można znaleźć w jednostce Getfile.U.

* Zawsze wstawiaj

$startsh

u góry każdego wygenerowanego skryptu, który będzie uruchamiany lub pozyskiwany przez
Konfigurowanie.

* Nigdy nie zakładaj typowych dla UNIX-izmów, takich jak fakt, że plik obiektowy kończy się na a .o i
na który kończy się nazwa biblioteki .a. Użyj $_o i $_a zamiast tego zmienne (zob
Unix.U).

* Wykonując test kompilacji-linku-wykonania, zawsze zapisuj go w ten sposób:

$cc $ccflags $ldflags try.c -o spróbuj $libs

ponieważ niektóre systemy wymagają określenia flag łączących przed kompilacją
target (z wyjątkiem końcowych bibliotek łączących).

* Wysyłaj ważne komunikaty na deskryptorze pliku nr 4, używając „>&4” do przekierowania danych wyjściowych.
Tylko te komunikaty pojawią się, gdy -s przełącznik jest dany Konfigurowanie na
wiersz poleceń (tryb cichy).

* Zawsze staraj się określić, czy dana funkcja występuje w najbardziej specyficzny sposób – nie rób tego
powiedz „if bsd”, kiedy możesz grep libc. Istnieje wiele systemów hybrydowych i
każda cecha powinna przetrwać lub upaść sama.

* Zawsze staraj się określić, czy dana funkcja występuje w najbardziej ogólny sposób, tak aby
inne pakiety mogą korzystać z Twojej jednostki.

* W razie wątpliwości ustaw wartość domyślną i zapytaj. Nie zakładaj niczego.

* Jeśli uważasz, że użytkownik się myli, uwzględnij fakt, że może mieć rację. Dla
na przykład może używać programu Configure w innym systemie niż będzie używany
produkt końcowy.

Metaconfig rezerwuje następujące nazwy w Twoim katalogu, a jeśli używasz takiej nazwy, to
może się zablokować lub wywołać inne nieprzewidziane skutki:

.MT/*
Konfigurowanie
poszukiwany
Przestarzały
skonfigurować
konfiguracja_h.SH
confmagic.h
Ty/*
MANIFEST.nowy

Dodatkowo Configure może usunąć te nazwy z katalogu, w którym jest uruchamiany:

UU/*
config.sh
konfiguracja.h

OPCJE


Następujące opcje są rozpoznawane przez metakonfiguracja:

-d Włącz tryb debugowania. Niezbyt przydatne, chyba że debugujesz metakonfiguracja
sama.

-h Wydrukuj wiadomość pomocy i wyjdź.

-k Zachowaj katalog tymczasowy, abyś mógł sprawdzić działające pliki używane przez
metakonfiguracja zbudować swój Konfigurowanie scenariusz. Przydatne tylko podczas debugowania pliku
jednostek.

-m Załóż dużą ilość pamięci i zamień przestrzeń. Przyspieszy to wyszukiwanie symboli
plików źródłowych przez znaczną ilość czasu kosztem pamięci
konsumpcja...

-o Mapuj przestarzałe symbole na nowe. Użyj tego przełącznika, jeśli nadal go masz
przestarzałe symbole w kodzie źródłowym i nie chcesz (lub nie możesz) ich usunąć
ich na razie. W przeciwnym razie przestarzałe symbole są ignorowane
otrzymasz ostrzeżenie od metakonfiguracja.

-s Włącz tryb cichy.

-t Śledzenie symboli w miarę ich znajdowania.

-v Włącz tryb szczegółowy.

-w Załóżmy, że plik Wanted jest aktualny. Spowoduje to pominięcie czasu i pamięci
pochłaniająca faza skanowania kodu źródłowego, poszukiwania znanych symboli. Użyj tego
tylko wtedy, gdy wiesz, że plik źródłowy nie zmienił się w odniesieniu do
pula metakonfiguracja użyte symbole.

-G Podaj także GNU skonfigurować-podobny frontend do wygenerowanego Konfigurowanie
skrypt, który również ma być dołączony do dystrybucji. To tylko opakowanie
wokół Konfigurowanie skrypt w sposób naturalny, ale pozwala osobom zaznajomionym się z
Narzędzie GNU, którego nie można zgubić w obliczu nowej dystrybucji.

-L reż Zastąp domyślną lokalizację biblioteki. Zwykle przydatne tylko dla metaconfig
konserwatorom, aby lokalnie używali opracowywanych jednostek zamiast
te ogólnodostępne. The reż określony to ten, który zawiera jednostki
U katalogiem.

-M Zezwalaj na produkcję a confmagic.h plik, aby automatycznie przemapować niektóre dobrze-
znanych symboli na inną alternatywę, np kopia() jest ponownie mapowany
przejrzyście do memcpy() kiedy nie jest dostępny. Ta opcja jest włączona
automatycznie, gdy a confmagic.h plik istnieje w katalogu najwyższego poziomu.
Jeśli chcesz trwale wyłączyć tę opcję, po prostu usuń ten plik.

-V Wydrukuj numer wersji i wyjdź.

SEMINARIUM


Ta (długa) sekcja stanowi wprowadzenie do metakonfiguracja, w którym dowiemy się wszystkiego
podstawy. Jeśli już wiesz, jak używać metakonfiguracja, możesz bezpiecznie przejść do następnego


Przegląd
Zwykle, gdy chcesz uzyskać jakiś pakiet źródłowy do kompilacji na danej platformie, którą posiadasz
aby edytować główny plik Makefile (zakładając, że taki istnieje!), wybierz kompilator C, upewnij się, że
mieć odpowiednie biblioteki, a następnie uruchomić plik robić Komenda. Jeśli pakiet jest rozsądny
dobrze napisany, skompiluje się (bez ostrzeżenia :-). Sam w sobie ostatni
zdanie to prawdziwa wydajność, biorąc pod uwagę różnorodność dostępnych obecnie platform UNIX
i różnorodność smaków, to znak, że autorka opakowania poszła głęboko
kłopoty z dokonaniem właściwego wyboru, biorąc pod uwagę standardowe próby, zgadywanie i bałagan
wokół elementów systemowych i typów.

Jednak pomimo całego swojego talentu autor nie może wiedzieć, że jakiś system ma
uszkodzone wywołanie systemowe lub że w jakiejś strukturze systemu brakuje jednego standardowego pola, lub
po prostu czy dany plik dołączany istnieje, czy nie. I nie biorę pod uwagę tego, co ukryte
założeń, takich jak typ zwracany przez metodę malloc () funkcję lub obecność
Przemianować() wywołanie systemowe, żeby wymienić tylko kilka. Ale ta wiedza jest konieczna, aby osiągnąć rzeczywistość
ruchliwość.

A teraz nie znęcajmy się nad sobą. Korzystanie z tych informacji wymaga większych umiejętności, ale jest to możliwe
prowadzić do bardziej przenośnych programów, ponieważ jest wówczas napisany w sposób niezależny od systemu
i opiera się wyłącznie na fakcie, że jakieś założenie jest prawdziwe lub fałszywe w konkretnym systemie,
każde założenie nie jest ze sobą powiązane. To znaczy, nie mówimy: jesteśmy na
System BSD lub jesteśmy na systemie USG. To i tak jest obecnie zbyt niejasne. Nie, chcemy
powiedz do kodu źródłowego: ten system nie ma Przemianować() wywołanie systemowe i malloc ()
zwraca a (próżnia *) wartość.

Metaconfig to narzędzie, które pozwoli Ci to zrobić, z dodatkową korzyścią polegającą na tym, że nie
konieczność ręcznej edycji pliku Makefile, jeśli wszystko pójdzie dobrze. Biegiem metakonfiguracja, tworzysz
skrypt powłoki o nazwie Konfigurowanie. Wiele wysiłku włożono w skrypt Configure
wewnętrzne, aby mieć pewność, że będzie działać na 99% istniejących powłok dostępnych obecnie
pismo. Configure będzie sondował system docelowy, zadając pytania w razie wątpliwości i
zbierz wszystkie odpowiedzi w jednym pliku powłoki, do którego z kolei można się przyzwyczaić
automatycznie generuje skonfigurowane pliki Makefile i pliki dołączane C.

Dla skryptów powłoki dostępny jest tylko ograniczony (ale dość duży) zestaw symboli
i programy C. Wszystkie są udokumentowane w pliku glosariusza. Wszystko, co musisz zrobić, to się uczyć
o nich i zacznij ich używać, aby rozwiązać problemy z przenośnością i konfiguracją. Następnie,
biegiem metakonfiguracja, dla Twojego pakietu zostanie wygenerowany odpowiedni skrypt konfiguracyjny.

Skrypt Configure składa się z kilku jednostek (ponad 300), przy czym każda jednostka jest
odpowiedzialny za zdefiniowanie niewielkiej liczby symboli powłoki i/lub C. Jednostki są zmontowane
razem na ostatnim etapie, honorując wykres zależności (jedna jednostka może potrzebować wyniku
kilku innych jednostek, które następnie są umieszczane wcześniej w skrypcie).

Symbolika
Symbole są najważniejszą rzeczą w metakonfiguracja świat. Są najmniejsze
rozpoznana jednostka, zazwyczaj słowo, której można nadać wartość na końcu konfiguracji
wykonanie. Na przykład symbol preprocesora C HAS_RENAME jest metakonfiguracja symbolizować to
ma gwarancję, że zostanie zdefiniowana wtedy i tylko wtedy, gdy Przemianować() wywołanie systemowe jest obecne. Podobnie,
dotychczasowy $ranlib zmienna powłoki zostanie ustawiona na „:” lub „ranlib” w zależności od tego, czy
zadzwonić do ranlib program jest potrzebny do zamówienia pliku biblioteki. Sposób, w jaki to działa, nie jest
na razie ważne jest, aby zrozumieć, że te symbole mają charakter życie
(tj. wartość). Konfigurowanie wykonanie.

Używanie symboli jest stosunkowo proste. W pliku źródłowym C wystarczy użyć symbolu
value, jako dyrektywa preprocesora (na przykład: #ifdef HAS_RENAME) lub, jeśli symbol
wartość jest ciągiem znaków, bezpośrednio tak, jakbyś użył makra w C. Oraz w pliku powłoki lub a
Makefile, możesz bezpośrednio odwoływać się do symbolu powłoki.

Właściwie to kłamię, bo to nie jest tak do końca tak magiczne, jak w poprzednim akapicie
mogłoby brzmieć. W pliku C musisz dołączyć plik wyprodukowany przez Configure konfiguracja.h plik i
musisz zawinąć swój skrypt powłoki lub plik Makefile w plik .SH i możesz odwoływać się do powłoki
symbol tylko w części zastępującej zmienną tego pliku .SH. Więcej na ten temat później.

Źródło Akta
Symbole mogą pojawiać się tylko w ograniczonym zestawie plików źródłowych, ponieważ metakonfiguracja będzie tylko
skanuj je, szukając znanych symboli, próbując dowiedzieć się, jakich jednostek będzie potrzebować.
Możesz używać symboli C w plikach źródłowych C, tj. plikach z rozszerzeniem .c, .h, .y or .l rozszerzenie i
symboli powłoki szuka się tylko w plikach .SH.

Aby uzyskać wartość symbolu, plik C musi zawierać znak specjalny konfiguracja.h
plik, który jest produkowany przez Konfigurowanie gdy obecne są symbole C. Uruchamiane są pliki .SH
przez powłokę, tworząc nowy plik. Jednak w górnej części pliku .SH plik
specjalny config.sh plik (również utworzony przez uruchomienie Konfigurowanie) ma charakter źródłowy i jest zmienny
obowiązują zamienniki. Faktycznie, konfiguracja.h jest generowany poprzez uruchomienie metakonfiguracja-wytworzony
konfiguracja_h.SH plik, ponownie używając podstawienia zmiennych. Przyjrzymy się więc temu
trochę bliżej, bo to jest serce całości konfiguracja schemat...

Zmienna Podstawienie
Istnieje konstrukcja powłoki tzw tutaj dokument co umożliwia polecenie pobrania danych wejściowych
określone w samym skrypcie. Dane wejściowe są interpretowane przez powłokę jako podwójne
ciąg w cudzysłowie lub pojedynczy ciąg znaków w cudzysłowie, w zależności od formy dokumentu tutaj
specyfikacja.

Aby określić dokument tutaj, używany jest token „<<”, po którym następuje pojedynczy identyfikator. Z
następnie pozostałe linie skryptu stanowią dane wejściowe dla polecenia, aż do tutaj
dokument znajduje się w osobnej linii. Podstawienie powłoki (w tym zmienna powłoki
podstawienia) jest wykonywane, chyba że identyfikator jest otoczony pojedynczymi cudzysłowami. Na przykład:

var='pierwszy'
tar='sekunda'
echo "--> pierwszy tutaj dokument:"
kot <
zmienna ='$ zmienna'
tar='$tar'
MOW
echo "--> drugi tutaj dokument:"
kot <<'EOM'
echo $zmienna
echo $tar
MOW
echo "--> koniec."

po przejściu przez powłokę wygeneruje:

--> pierwszy tutaj dokument:
var='pierwszy'
tar='sekunda'
--> drugi tutaj dokument:
echo $zmienna
echo $tar
--> koniec.

Treść pierwszego dokumentu jest interpretowana, podczas gdy drugi jest wyświetlany w niezmienionej postaci.
Obydwa są przydatne w skrypcie .SH, jak zaraz się przekonamy.

Korzystanie z .CII skrypty
Skrypt .SH jest zwykle tworzony poprzez uruchomienie ZróbSH skrypt inny, istniejący plik,
transformatorowy filet w plik.SH. Weźmy pojedynczy przykład. Oto mały skrypt
(nazwijmy to rozmiar wewnętrzny), która drukuje pojedynczą wiadomość o rozmiarze int typ danych w C.
Niestety ma wbudowaną wartość, a zatem:

#!/ Bin / sh
intsize='4'
echo „Na tym komputerze typ int to $intsize bajtów”

Biegnijmy zrobićSH na nim, wpisując „zrobićSH rozmiar wewnętrzny'. Dostajemy jedynkę rozmiar.SH zgłoś to
wygląda tak:

przypadek $CONFIG w
'')
jeśli test -f config.sh; następnie TOP=.;
test elif -f ../config.sh; następnie TOP=...;
test elif -f ../../config.sh; wtedy TOP=../..;
test elif -f ../../../config.sh; wtedy TOP=../../..;
test elif -f ../../../../config.sh; wtedy TOP=../../../..;
więcej
echo "Nie można znaleźć pliku config.sh."; wyjście 1
fi
. $TOP/config.sh
;;
to C
: Zmusza to pliki SH do utworzenia celu w tym samym katalogu co plik SH.
: Dzieje się tak, aby make zależne zawsze wiedziało, gdzie znaleźć pochodne SH.
sprawa „$ 0” w
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
to C
echo "Wyodrębnianie intsize (z podstawieniami zmiennych)"
: W tej sekcji pliku zostaną wykonane podstawienia zmiennych.
: Przenieś wszystko, co wymaga konfiguracji subwooferów, z !NO!SUBS! sekcja do !GROK!THIS!.
: Chroń wszelkie znaki dolara i backticki, których nie chcesz interpretować
: umieszczając ukośnik odwrotny z przodu. Możesz usunąć te komentarze.
$spitshell >intsize <
$startsh
!GROK!TO!

: W poniższych dolarach i backtickach nie jest potrzebny dodatkowy ukośnik odwrotny.
$spitshell >>intsize <<'!NIE!SUBY!'
intsize='4'
echo „Na tym komputerze typ int to $intsize bajtów”
!NIE!SUBS!
chmod 755 rozmiar całkowity
$eunicefix rozmiar wewnętrzny

Pierwsza część tego skryptu (w pliku walizka instrukcja) próbuje zlokalizować plik config.sh
plik, aby go pozyskać. The $KONFIG zmienna domyślnie ma wartość false, a kiedy jest prawdziwa
config.sh został już pobrany (co miałoby miejsce, gdyby ten plik został wykonany z
w ciągu Konfigurowanie samo w sobie, ale nie mieszajmy tutaj problemu).

Po config.sh plik został źródłami, wszystkie symbole powłoki zdefiniowane przez Konfigurowanie jest
ustawić. Wiemy, że sięgamy do drugiej instrukcji case, służącej do zmiany bieżącego katalogu: a
ścieżka, której można użyć, aby dotrzeć do tego programu (na przykład, jeśli powiedzieliśmy „sh ../scripts/intsize.SH', My
najpierw pobiegłbycd ../skrypty' przed kontynuacją). Jeśli tego nie rozumiesz, nie rób tego
martw się o to.

Oto interesujące rzeczy. Ten skrypt używa $spitshell zmienna, a tak nie jest
coś o czym wiemy...jeszcze. Jeśli przejrzysz plik słownika, zobaczysz to
jest to zmienna znana przez metakonfiguracja. Jeśli uczynisz ten plik częścią swojej dystrybucji
(dołączając go do pliku MANIFEST.new, wrócimy do tego później) i uruchom
metakonfiguracja, a później Konfigurowanie skrypt określi odpowiednią wartość dla tej zmiennej
i zostanie wstawiony config.sh. To samo dotyczy $startsh i tajemniczy $eunicefix at
koniec. W rozsądnym systemie odpowiednia część config.sh wyglądałby tak:

spitshell = „kot”
startsh='#!/ Bin / sh'
eunicefix=':'

Ach! Docieramy tam. Teraz wygląda znajomo. Mamy do czynienia z jedynką jak polecenie czyje
dane wejściowe pochodzą z dokumentu interpolowanego tutaj ze zmiennymi i do którego dane wyjściowe są przekierowywane
rozmiar wewnętrzny. Wartość będzie równa $startsh, tj '#!/ Bin / sh'. Jak na razie dobrze.

Następnie dochodzimy do drugiego rozwinięcia dokumentu, aby uzyskać pozostałą część skryptu. Ten
czas, tutaj symbol dokumentu jest otoczony pojedynczymi cudzysłowami, więc treść będzie taka
dołączone dosłownie do rozmiar wewnętrzny plik. Zatem uruchamiając 'sh rozmiar.SH', otrzymujemy
następujące dane wyjściowe:

Wyodrębnianie intsize (z podstawieniami zmiennych)

i patrząc na utworzony plik intsize, widzimy:

#!/ Bin / sh
intsize='4'
echo „Na tym komputerze typ int to $intsize bajtów”

czyli dokładnie to, co mieliśmy na początku. Na razie jest to zabieg bezoperacyjny...
Ale jak cudownie! Tak się składa (czysty przypadek, zaufaj mi!), że metakonfiguracja wie
o $introzmiar symbol muszli. Przenosząc inicjalizację intsize do zmiennej-
interpolowany obszar skryptu .SH i inicjowanie go za pomocą Konfigurowanie-wartość obliczona,
i usunięcie teraz bezużytecznych komentarzy dodanych przez zrobićSH, otrzymujemy:

przypadek $CONFIG w
'')
jeśli test -f config.sh; następnie TOP=.;
test elif -f ../config.sh; następnie TOP=...;
test elif -f ../../config.sh; wtedy TOP=../..;
test elif -f ../../../config.sh; wtedy TOP=../../..;
test elif -f ../../../../config.sh; wtedy TOP=../../../..;
więcej
echo "Nie można znaleźć pliku config.sh."; wyjście 1
fi
. $TOP/config.sh
;;
to C
sprawa „$ 0” w
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
to C
echo "Wyodrębnianie intsize (z podstawieniami zmiennych)"
$spitshell >intsize <
$startsh
intsize='$intsize'
!GROK!TO!

$spitshell >>intsize <<'!NIE!SUBY!'
echo „Na tym komputerze typ int to $intsize bajtów”
!NIE!SUBS!
chmod 755 rozmiar całkowity
$eunicefix rozmiar wewnętrzny

Oczywiście uruchomienie tego skryptu przez powłokę ponownie wygeneruje ten sam skrypt. Ale jeśli
biegniemy Konfigurowanie na maszynie, na której int jest przechowywany jako ilość 64 bitów, config.sh będzie
zestaw rozmiar wewnętrzny do 8 i rozmiar wewnętrzny skrypt będzie miał odpowiednią wartość i wyświetli:

Na tym komputerze typ int ma 8 bajtów

który jest poprawny. Gratulacje! Właśnie skonfigurowaliśmy skrypt powłoki!!

Produkcja konfiguracja.h
Możemy teraz przyjrzeć się drodze konfiguracja.h jest produkowany z konfiguracja_h.SH. Wiemy to
bieganie Konfigurowanie produkuje config.sh skrypt (jak dokładnie to się robi, nie jest ściśle
istotne tutaj, ale dla ciekawskich jest to kolejna substytucja dokumentu w tym miejscu
Konfigurowanie samo). The konfiguracja_h.SH sam jest zbudowany przez metakonfiguracja naraz
Konfigurowanie jest pod warunkiem, że w swoich źródłach użyjesz co najmniej jednego symbolu C.

Rzućmy okiem na kilka przypadkowych konfiguracja_h.SH plik, aby zobaczyć, co się naprawdę dzieje:

przypadek $CONFIG w
'')
jeśli test -f config.sh; następnie TOP=.;
test elif -f ../config.sh; następnie TOP=...;
test elif -f ../../config.sh; wtedy TOP=../..;
test elif -f ../../../config.sh; wtedy TOP=../../..;
test elif -f ../../../../config.sh; wtedy TOP=../../../..;
więcej
echo "Nie można znaleźć pliku config.sh."; wyjście 1
fi
. $TOP/config.sh
;;
to C
sprawa „$ 0” w
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
to C
echo "Wyodrębnianie pliku config.h (z podstawieniami zmiennych)"
sed < config.h -e 's!^#undef!/define!' -e 's!^#un-def!#undef!'
/*
* Ten plik został utworzony poprzez uruchomienie skryptu config_h.SH, który
* pobiera swoje wartości z config.sh, który jest zwykle tworzony przez
* uruchomienie konfiguracji.
*
* Możesz dowolnie modyfikować dowolne z nich, jeśli zajdzie taka potrzeba. Uwaga jednak
* że ponowne uruchomienie config.h.SH usunie wszelkie wprowadzone zmiany.
* Aby uzyskać bardziej trwałą zmianę, edytuj config.sh i uruchom ponownie config.h.SH.
*/

/* Czas konfiguracji: $cf_time
* Konfigurowany przez: $cf_by
* System docelowy: $myuname
*/

#ifndef _config_h_
#zdefiniuj _config_h_

/* bkopia:
* Ten symbol jest mapowany na memcpy, jeśli procedura bcopy() nie jest
* dostępne do kopiowania ciągów.
*/
/* HAS_BCOPY:
* Ten symbol jest zdefiniowany, jeśli dostępna jest procedura bcopy().
* kopiuj bloki pamięci. Nie należy używać tego symbolu pod
* normalne okoliczności i zamiast tego użyj bezpośrednio bcopy(), która
* zostanie zamapowany na memcpy(), jeśli bcopy nie jest dostępne.
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef HAS_BCOPY
#ifdef bkopia
#un-def bcopy
#endif
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* mapowane do memcpy */
#endif

/* HAS_DUP2:
* Ten symbol, jeśli jest zdefiniowany, wskazuje, że jest to procedura dup2
* dostępne dla duplikatów deskryptorów plików.
*/
#$d_dup2 HAS_DUP2 /**/

/* I_STRING:
* Ten symbol, jeśli jest zdefiniowany, wskazuje programowi C, że powinien
* włączać (systemy USG) zamiast (systemy BSD).
*/
#$i_string I_STRING /**/

#endif
!GROK!TO!

Na górze pliku rozpoznajemy standardową konstrukcję .SH, którą już mamy
szczegółowo studiował. Następnie następuje wyodrębnienie samego pliku za pośrednictwem dokumentu tutaj z
substytucje zmiennych. Jednak tutaj nie używamy równiny jak ale a sed zamiast tego, ponieważ
musimy na bieżąco wprowadzać dalsze zmiany. Zobaczymy dlaczego później, więc zapomnijmy
o tym teraz.

Dochodzimy teraz do komentarza wiodącego, a plik jest oznaczony czasem konfiguracji, czyli rozszerzeniem
system docelowy itp. (te zmienne pochodzące z pliku sourced config.sh plik był
ustanowiony przez Konfigurowanie). Po nagłówku komentarza następuje zabezpieczenie „#ifndef”, którego należy strzec
przed wielokrotnym włączeniem tego pliku. Następnie pojawia się serce pliku...

Warto wiedzieć, że $d_* i $i_* zmienne są ustawione na 'określić"lub"nieokreślony' za pomocą
Konfigurowanie, w zależności od tego, czy w systemie znajduje się funkcja lub plik dołączany, lub
nie. Oznacza to, że:

#$d_bcopy HAS_BCOPY /**/

linia zostanie rozszerzona do:

#zdefiniuj HAS_BCOPY /**/

jeśli zmienna $d_bcopy jest ustawiona na „define” lub:

#undef HAS_BCOPY /**/

jeśli $d_bcopy ustawiono na „undef”, ponieważ tej funkcji tam nie było. Jednak tak nie jest
co jest napisane w konfiguracja.h plik ze względu na sed filtr, który już widzieliśmy,
co przekształci drugą formę w:

/*#zdefiniuj HAS_BCOPY /**/

Jest to przydatny formularz do późniejszej edycji konfiguracja.h ponieważ wystarczy usunąć
wiodący „/*”, jeśli chcesz zastąpić Konfigurowaniewybór. Podobnie możesz dodać pojedynczy
„/*” na początku linii „#define”, aby uniknąć definicji konkretnego symbolu.
Dlatego każda definicja symbolu jest chroniona końcowym znakiem „/**/”, zamykającym początek
komentarz otwarty przez „/*” (komentarze nie są zagnieżdżone w C).

Teraz przekształcenie „#undef” w „/*#define” jest fajne, ale jeśli chcemy faktycznie napisać
„#undef”, utknęliśmy… chyba że zapiszemy to jako „#un-def” i pozwolimy sed popraw to na „#undef”
podczas produkcji konfiguracja.h, co właściwie zostało tutaj zrobione.

Ten sam rodzaj rozumowania ma zastosowanie do tych dwóch linii:

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

i zakładając config.sh definiuje:

d_dup2='zdefiniuj'
i_string='undef'

dostaniemy się do produkcji konfiguracja.h:

#zdefiniuj HAS_DUP2 /**/
/*#zdefiniuj I_STRING /**/

Czysta jak bieżąca woda? Dobry!

Teraz powinno być oczywiste, że włączając konfiguracja.h we wszystkich plikach źródłowych C, możesz to zrobić
wiesz co Konfigurowanie odgadł w twoim systemie. W efekcie, używając tych symboli, jesteś
pisanie skonfigurowanego kodu C, ponieważ metakonfiguracja będziesz wiedział, że potrzebujesz tych symboli i będzie
wygenerować odpowiedni konfiguracja_h.SH plik, a także cały niezbędny kod Konfigurowanie do
obliczyć dla nich odpowiednią wartość (przypisując wartości do powiązanych zmiennych powłoki).

Bieganie Metakonfiguracja
Skupmy się na metakonfiguracja program przez chwilę, aby zrozumieć, w jaki sposób używa swoich jednostek i
swój kod źródłowy, aby wygenerować wszystkie potrzebne pliki konfiguracyjne. Jeśli masz zamiar pisać nowe
jednostek, powinieneś dobrze rozumieć cały schemat.

Jeśli nie ma pliku MANIFEST.new, metakonfiguracja spróbuje zamiast tego użyć pliku MANIFESTU,
dla wygody. Wszędzie, gdzie wspominamy o MANIFEST.new, można to rozumieć jako MANIFEST
pod warunkiem, że w katalogu głównym pakietu nie znaleziono pliku MANIFEST.new.

Zakładając, że plik MANIFEST.new jest poprawnie ustawiony i zawiera listę wszystkich plików źródłowych, które chcesz
skonfigurować i który uruchomiłeś pakowanie w głównym katalogu źródłowym, aby utworzyć plik
.pakiet plik, możesz uruchomić metakonfiguracja a otrzymasz następujące informacje:

$ metakonfiguracja
Lokalizowanie jednostek...
Wyodrębnianie list zależności z 312 jednostek...
Wyodrębnianie nazw plików (*.[chyl] i *.SH) z MANIFEST.new...
Tworzenie pliku poszukiwanego...
Skanowanie plików .[chyl] w poszukiwaniu symboli...
Skanowanie plików .SH w poszukiwaniu symboli...
Obliczanie optymalnego wykresu zależności...
Tworzenie prywatnego pliku make...
Określanie jednostek ładowalnych...
Aktualizowanie pliku make...
Ustalanie prawidłowej kolejności jednostek...
Tworzenie konfiguracji...
Dotację.

Pierwsza faza szuka wszystkich plików jednostek (z rozszerzeniem .U) w katalogu publicznym
najpierw, potem w swoim prywatnym. Jeśli skopiujesz plik publiczny do swojego prywatnego katalogu U
(tj. katalog o nazwie U na najwyższym poziomie pakietu), zastąpi on katalog public
wersja. Kiedy już uzyska listę wszystkich dostępnych jednostek, analizuje je i wyodrębnia wszystkie
linie ?MAKE: informujące o zależnościach i znanych symbolach powłoki. To także
skupia się na liniach ?H:, aby dowiedzieć się o symbolach C i jakie symbole powłoki muszą być
obliczone, aby uzyskać odpowiednią wartość dla tego symbolu C (więc mamy inny poziom zależności
tutaj).

Następnie z plików MANIFEST.new wyodrębniane są prawidłowe nazwy plików i a poszukiwany plik jest
zbudowany: ten plik zawiera listę wszystkich symboli C i symboli powłoki potrzebnych dla tego pakietu. My
najpierw przeskanuj pliki typu C w poszukiwaniu symboli C, a następnie propaguj zależności do nich
powiązane symbole powłoki (zebrane z ?H: linii). Następnie skanowane są pliki .SH i na koniec
wszystkie symbole powłoki są znane.

Tworzony jest tymczasowy plik Makefile i metaconfig próbuje to zrobić robić wszystkie symbole powłoki, aby zobaczyć
jakie polecenia (wymienione w drugiej linii ?MAKE:) są wykonywane, a co za tym idzie, jakie jednostki
naprawdę potrzebne. Opcjonalne jednostki, które w innym przypadku nie są wymagane, są usuwane i umieszczany jest drugi plik Makefile
wygenerowane. Tym razem wiemy o wszystkich jednostkach i odpowiadających im rozkazach, opcjonalnie
jednostki zostały usunięte i obliczono wartości domyślne dla ich symboli powłoki. The
Konfigurowanie następnie można wygenerować skrypt wraz z konfiguracja_h.SH. Skończyliśmy.

Konwencje
Aby cały proces przebiegał prawidłowo, należy przestrzegać odpowiednich konwencji. Jest przypadek
konwencja jednostek i konwencja nazewnictwa zmiennych.

Wszystkie jednostki powinny mieć swoją pierwszą literę małą literą, chyba że są to jednostki specjalne. Przez
special, mamy na myśli, że tak naprawdę nie definiują nowych zmiennych powłoki, które mogą być używane przez
użytkownika w swoich plikach .SH, ale raczej jednostki tworzące skrypty lub zmienne powłoki, które mają to zrobić
być używane wewnętrznie przez Konfigurowanie scenariusz. Typowymi przykładami są Inicj.U plik, który jest
inicjalizacja głównej zmiennej, lub Myread.U który produkuje mójprzeczytany skrypt używany prawie
wszędzie in Konfigurowanie gdy użytkownik ma zadać pytanie.

Jednostki inne niż specjalne dzielą się następnie na dwie odrębne grupy: jednostki definiujące zmienne
powiązane z symbolem C i jednostkami definiującymi własne zmienne powłoki. Pierwsza grupa
jest dalej podzielony na zmienne związane z plikami dołączanymi (ich nazwy zaczynają się od i_) i
zmienne powiązane z innymi definicjami (nazwa zaczynająca się od d_). Druga grupa ma
na przykład nazwy, które same się bronią cc.U definiuje $cc zmienna powłoki, której wartość wynosi
kompilator C, który ma być używany.

Jednostki specjalne czasami rezerwują sobie jakąś predefiniowaną zmienną i zwracają „wyniki”
w innych dobrze znanych zmiennych. Na przykład mójprzeczytany scenariusz wyprodukowany przez Myread.U
oczekuje podpowiedzi $RP, domyślna odpowiedź w $dflt i umieszcza odpowiedź użytkownika $an.
Nie jest to udokumentowane na tej stronie podręcznika: musisz iść i przyjrzeć się samemu urządzeniu
zrozumieć, jakie zmienne są używane i w jaki sposób jednostka ma być używana.

Korzystanie z Połączenia Słownik
Plik glosariusza jest tworzony automatycznie przez nabłyszczać skrypt, który wyodrębnia plik
informacje z ?S:, ?C: i ?MAKE: linie i przekształca je w sposób alfabetyczny
posortowany słownik. Ważne jest, aby przeczytać Słowniczek, aby dowiedzieć się, jakimi symbolami jesteś
wolno używać. Słowniczek nie powie jednak, jak z nich korzystać. Zwykle to jest
zależy od Ciebie.

Pewnego dnia prawdopodobnie napiszesz własne jednostki i będziesz o nich wiedział wystarczająco dużo metakonfiguracja
aby to zrobić szybko i skutecznie. Nigdy jednak nie zapomnij odpowiednio udokumentować swojej pracy
wiersze ?S: i ?C:, w przeciwnym razie inne osoby nie będą mogły go ponownie wykorzystać. Pamiętajcie o
czas, w którym na początek miałeś tylko słownik i tę stronę podręcznika.

Wnioski
Teraz, kiedy już znasz metakonfiguracja podstawy, powinieneś przeczytać OPIS sekcja, a następnie
przejdź do REFERENCE sekcję, aby dowiedzieć się o wszystkich krwawych szczegółach, takich jak dozwolone
składnia linii sterujących jednostką (linie zaczynające się od „?”) lub odrębnych poleceń MAKE
możesz używać.

REFERENCE


Ta sekcja dokumentuje elementy wewnętrzne metakonfiguracja, w zasadzie składnia jednostkowa, specjalna
jednostki, o których powinieneś wiedzieć, oraz pliki podpowiedzi.

Ogólne Jednostka Składnia
Jednostka metaconfig jest podzielona na dwie odrębne części. Sekcja nagłówka (linie zaczynające się od
z „?”) i sekcję powłoki (kod należy uwzględnić w pliku Konfigurowanie scenariusz). To jest
możliwe jest dodanie komentarzy „?X:” w dowolnym miejscu jednostki, ale drugie „?” linie (też
nazywa kontrola linie) mają ścisłą politykę zamówień.

Jeśli linia kontrolna jest zbyt długa, można zastosować kontynuację poprzez ucieczkę od finału
nowa linia z ukośnikiem odwrotnym i kontynuacja w następnej linii (która powinna być wówczas wcięta
spacjami lub tabulatorami).

Poniżej znajduje się formalny opis każdej z linii kontrolnych. Chyba że stwierdzono
w przeciwnym razie kolejność tej prezentacji jest porządkiem stosowanym w jednostce.

?RCS: za darmo XNUMX
Do wykorzystania w komentarzach RCS, na górze urządzenia.

?X: każdy XNUMX
Komentarze o charakterze ogólnym. Może pojawić się w dowolnym miejscu jednostki, ale należy go uzasadnić.
Aby komentować RCS, użyj formularza komentarza ?RCS:.

?ROBIĆ:symbol podstęp: zależność podstęp [+opcjonalnie]
To jest pierwsza linia zależności. Pierwszy symbol podstęp powinien wymienić wszystkie symbole
zbudowane przez tę jednostkę (tj. których wartość jest obliczana na podstawie przekroju powłoki jednostki).
Symbole powinny być oddzielone spacjami. Jeśli zdefiniowany symbol jest przeznaczony wyłącznie do użytku wewnętrznego i
nie powinien pojawić się w wygenerowanym pliku config.sh plik, to powinien być poprzedzony a
„+” (nie mylić z opcjonalnymi zależnościami zdefiniowanymi poniżej). Drugi
częścią listy (po środkowym „:”) jest zależność jednostki. Powinno wyświetlić wszystkie
potrzebne jednostki specjalne, a także wszystkie symbole używane przez powłokę
realizacja. Jeśli symbol jest potrzebny, ale jego wartość konfiguracyjna nie jest krytyczna, zostanie on dodany
może być poprzedzone znakiem „+”, w takim przypadku nazywa się to zależnością warunkową: is
odpowiednia jednostka zostanie załadowana wtedy i tylko wtedy, gdy ten symbol jest rzeczywiście inny
poszukiwany; w przeciwnym razie zostanie użyta wartość domyślna.

?ROBIĆ:Zakładka komenda
Po początkowych wierszach zależności może znajdować się jeden lub więcej wierszy poleceń. Te
polecenia zostaną wykonane, gdy jednostka będzie chciała je załadować Konfigurowanie. Zobaczyć
akapit dotyczący poleceń make zawiera więcej informacji. Należy pamiętać, że wiodący Zakładka
znak jest wymagany przed komenda.

?T:układ
Zadeklaruj dyrektywę dotyczącą układu dla tej jednostki. Ta dyrektywa może być jednym z ciągów
Top, domyślnym or dolny (wielkość liter nie ma znaczenia, zalecanym stylem jest ich przeliterowanie
wielkimi literami). Jeśli zostanie pominięty, domyślnym zakłada się.

Ta dyrektywa jest wymagana tylko wtedy, gdy chcesz wymusić umieszczenie jednostki na górze lub na dole
wygenerowanych Konfigurowanie skrypt, o ile pozwalają na to zależności jednostek. Ważny
pytania mogą być zatem wymuszone na początku. W tej samej klasie układu, units
są posortowane alfabetycznie z dwoma specjalnymi przypadkami dla jednostek d_* i i_*, wymuszone
odpowiednio na górze i na dole swoich klas (ale powinny one należeć do
klasa domyślna).

Wymuszasz na górze jednostkę, której zależności wymagają od wszystkich pozostałych jednostek
poprzedzając to, nie osiągniesz nic ciekawego. Dlatego ta dyrektywa naprawdę powinna
można wykorzystać do zwiększenia priorytetu niektórych jednostek interaktywnych, które nie zależą od wielu
inne symbole widoczne dla użytkownika, np. pytania związane ze ścieżką.

?S:nazwa_symbolu [(przestarzały symbol podstęp)]:
Wprowadza symbol powłoki. Ta pierwsza linia nazywa symbol, po którym opcjonalnie następuje a
lista zawarta w nawiasie i podająca przestarzały odpowiednik. Te przestarzałe
symbole zostaną ponownie przypisane do nowych nazwa_symbolu Jeśli -o podana jest opcja
metakonfiguracja.

?S:każdy text, dla Słownik
Zasadniczo komentarz opisujący symbol powłoki, który zostanie wyodrębniony przez nabłyszczać
do pliku słownika.

?S:. Zamyka komentarz symbolu powłoki.

?C:nazwa_symbolu [~ alias] [(przestarzały symbol podstęp)]:
Wprowadza nowy symbol C. The alias nazwa to nazwa, pod którą będzie znajdował się symbol C
być kontrolowane, tj. jeśli alias symbol jest pożądany, wówczas ten symbol C zostanie zapisany
konfiguracja_h.SH plik. Zwykle alias to po prostu „%<” (skrót od nazwy jednostki)
jest też linia ?W: odwzorowująca symbol C na alias. Również odpowiednie części
linii ?H: są jawnie chronione przez warunek „?%<”. Zobacz symbol
aliasowanie akapitu, aby uzyskać więcej szczegółów. Pozostała część linii jest opcjonalna
przestarzały symbol podstęp, który zawiera listę starych odpowiedników nowego nazwa_symbolu.

?C:każdy text, dla Słownik i konfiguracja_h.SH
Zasadniczo komentarz opisujący symbol C, który zostanie wyodrębniony przez nabłyszczać
do pliku słownika i przez metakonfiguracja do konfiguracja_h.SH plik, jeśli symbol to
pożądany (lub jeśli potrzebny jest jego alias, gdy używane jest aliasowanie symboli).

?C:. Zamyka komentarz symbolu C.

?H:?symbol:konfiguracja_h.SH rzeczy
To jest ogólna prośba o włączenie do konfiguracja_h.SH. Wiersz jest zapisywany tylko wtedy, gdy
ochrona symbol jest naprawdę pożądany. Ta ogólna forma jest potrzebna, gdy symbol C
zastosowano aliasing. W przeciwnym razie, jeśli użyjesz jednego z pozostałych „standardowych” formularzy, plik
ochrona jest wykonywana automatycznie przez metakonfiguracja sama.

?H:#$d_zmienna VAR "$zmienna"
Warunkowo definiuje VAR Symbol C w $zmienna kiedy jest ustawione na 'określić'. Oznacza:
'?VAR:' stan ochronny i metakonfiguracja automatycznie łączy VAR do swoich dwóch skorup
zależności zmienne (tj. oba $d_zmienna i $zmienna zostanie oznaczony jako poszukiwany if VAR is
używane w źródłach C).

?H: #zdefiniuj VAR [fakultatywny XNUMX]
Zawsze definiuje VAR Symbol C do pewnej wartości. Oznacza „?VAR:' stan ochronny.
Do samej jednostki tworzona jest automatyczna zależność powłoki.

?H: #zdefiniuj VAR(x,y,z) $zmienna
Zawsze definiuje makro VAR być wartością $zmienna zmienny. To zależy od
urządzenie, aby zapewnić $zmienna ma rozsądną wartość. Automatyczna zależność pomiędzy C
makro VAR i zmienna powłoki zostaje ustalona, ​​a cała linia jest chroniona przez an
ukryte '?VAR:'.

?H:#$d_zmienna VAR
Warunkowo określa VAR if $d_zmienna jest ustawione na 'określić'. Oznacza „?VAR:' pilnuje
stan : schorzenie. Generowana jest automatyczna zależność powłoki w kierunku $d_war.

?H: #zdefiniuj VAR "$zmienna"
Przypisuje skonfigurowaną wartość do VAR Symbol C. Oznacza „?VAR:' warunek ochronny.
W celu połączenia generowana jest automatyczna zależność powłoki VAR i $zmienna.

?H:. Zamyka konfiguracja_h.SH prośby o włączenie.

?M:C symbol: C Zależności
Wprowadza definicję magiczną dotyczącą symbolu C, np confmagic.hi definiuje
symbol ochronny dla pozostałych ?M: definicji. Ta linia po cichu sugeruje
'?W:%<:C symbol', tj. urządzenie zostanie załadowane do programu Configure, jeśli pojawi się symbol C
w źródłach C, niezależnie od tego, czy używana jest magia, czy nie. Zależności C są aktywowane
kiedy używa się magii, aby narzucić ich definicję konfiguracja_h.SH. Jeśli jednak
magia jest nie używany, ale symbol C pojawia się w źródle bez potrzebnego C
zależności, będziesz ostrzegany za każdym razem, gdy plik Wanted będzie tworzony, ponieważ może tak być
problem z przenośnością (a także dlatego, że urządzenie jest bezwarunkowo załadowane do
Skonfiguruj za każdym razem, gdy używany jest symbol C, niezależnie od innych linii ?C: z
jednostka).

?M:Cpp def
Definiuje magiczne mapowanie cpp, które ma zostać wprowadzone w confmagic.h, gdy tylko jest to potrzebne
używany jest symbol. Istnieje ukryte „?”sympilnuje gdzie sym to nazwa symbolu
zdefiniowany przez wiodącą linię ?M:.

?M:. Zamyka confmagic.h żądanie włączenia.

?W:powłoka symbol podstęp:C symbol podstęp
Wiąże przeznaczenie symboli powłoki z przeznaczeniem symboli C: jeśli którykolwiek z C
wymienione symbole są pożądane, wówczas wszystkie symbole powłoki są zaznaczane jako pożądane. Przydatne do
wymusza włączenie jednostki (lista symboli powłoki ustawiona na „%<”), gdy obecność jakiegoś C
wykryto symbol. Listę symboli powłoki można pozostawić pustą, aby skorzystać z boku
efekt lokalizacji symbolu C we wbudowanym preprocesorze (symbol to zdefiniowane
dla tego preprocesora, jeśli znajduje się w źródle). Aby szukać wzorów ze spacją
w nich należy zacytować symbole C w prostych cudzysłowach, jak w „struct
strefa czasowa'.

?V:tylko do odczytu symbole:czytać i pisać symbole
To jest metalint podpowiedź i powinna być używana tylko w jednostkach specjalnych eksportujących trochę pocisków
zmienne. Zmienne przed środkowym „:” są eksportowane w trybie tylko do odczytu (zmieniając je
wyświetli ostrzeżenie), natomiast pozostałe symbole można dowolnie odczytywać i zmieniać.

?F:pliki stworzony
Ta linia służy dwóm celom: jest to a metalint wskazówka, a także symbol zastępczy dla
przyszłość zrób używać. Musi zawierać trzy rodzaje plików: tymczasowe, które są
utworzone do testu, prywatne UU utworzone w katalogu UU na później
perusal i publiczne pozostawione w katalogu głównym pakietu. Tymczasowy
pliki muszą być wymienione z poprzedzającym '!' znak (co oznacza „nie! nie są ponownie używane
później!”), prywatne pliki UU powinny być poprzedzone znakiem „./” (co oznacza: aby ich użyć, powiedzmy
./plikNie tylko filet), a publiczne powinny mieć nazwę taką, jaka jest.

?T:powłoka prowizorium
Inne metalint wskazówka. Ta linia zawiera listę wszystkich zmiennych powłoki używanych jako tymczasowe
w części skorupowej tej jednostki.

?D:symbol='wartość'
Wartość inicjująca dla symboli używanych jako zależności warunkowe. Jeśli nie?D: linia jest
zostanie znaleziony, zamiast tego zostanie użyta wartość null. The metalint program ostrzeże Cię, jeśli a
symbol jest używany co najmniej raz jako zależność warunkowa i nie ma właściwości
?D: inicjalizacja. Dobrą praktyką jest dodawanie tych linii nawet w przypadku wartości null
inicjalizacja, ponieważ kładzie nacisk na możliwie opcjonalną naturę symbolu.

?O:każdy wiadomość ty chcieć
Dyrektywa ta wskazuje, że to urządzenie jest jako całość przestarzałe. Ilekroć użycie dowolnego
jego symboli (lub pośredniego użycia poprzez zależności), komunikat jest wyświetlany
ekran (na stderr). Możesz umieścić jedną lub więcej linii, w takim przypadku każda linia będzie
wydrukować, w kolejności.

?SZARPIE:metalint wskazówki
Zobacz metalint stronę podręcznika zawierającą wyjaśnienie różnych wskazówek, jakie mogą być
używany.

?W TYM:inicjalizacji kod
Kod inicjujący określony w tej linii zostanie załadowany na górze pliku
Konfigurowanie skrypt pod warunkiem, że jednostka jest potrzebna.

C symbol Aliasy
Czasem nie można na nim polegać metakonfiguracjawłasny domyślny wybór dla konfiguracja_h.SH
komentarze i definicja symbolu C. Tutaj właśnie wchodzi w grę aliasing. Skoro to raczej
trudne do wyjaśnienia, przeanalizujemy przykład, aby zrozumieć leżący u podstaw mechanizm.

Jednostka d_const.U próbuje ustalić, czy Twój kompilator C wie o const
słowo kluczowe. Jeśli nie, chcemy ponownie zmapować to słowo kluczowe na ciąg zerowy, aby umożliwić
skompilować program. Co więcej, chcemy automatycznie uruchomić test, gdy const słowo
Jest używane.

Oto odpowiednie części jednostki d_const.U:

?MAKE:d_const: cat cc ccflags Ustawzmienna
?MAKE: -pick dodaj $@%
?S:d_const:
?S: Ta zmienna warunkowo definiuje symbol HASCONST, który
?S: wskazuje programowi C, że ten kompilator C wie o
?S: typ stały.
?S:.
?C:HASCONST ~%<:
?C: Ten symbol, jeśli jest zdefiniowany, wskazuje, że wie o tym kompilator C
?C: typ stały. Nie ma potrzeby testowania tego symbolu
?C: w twoich programach. Samo użycie słowa kluczowego „const” spowoduje
?C: uruchom niezbędne testy.
?C:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:#zdefiniuj stałą
?H:?%<:#endif
?H:.
?W:%<:stała
?LINT:ustaw d_const
?LINT:znana stała
: sprawdź słowo kluczowe const
Echo " "
echo 'Sprawdzam, czy twój kompilator C wie o "const"...' >&4
/kosz/kot >const.c <<'EOCP'
Głównym ()
{
stała char *foo;
}
ECPW
if $cc -c $ccflags const.c >/dev/null 2>&1 ; Następnie
wartość="$definiuj"
echo „Tak, tak.”
więcej
wartość="$undef"
echo „Nie, nie ma.”
fi
ustaw d_const
ewal $zmienna zadana

Najpierw zauważamy użycie linii ?W:, która zasadniczo mówi: „Ta jednostka jest potrzebna, gdy
const słowo kluczowe jest używane w pliku C.”. Aby warunkowo zmienić mapowanie const do zera
ciąg w konfiguracja.h, zdecydowałem się zdefiniować warunkowo HASCONST przez $d_const.

Rodzi to jednak problem, ponieważ HASCONST symbol nie będzie używany w
źródła, tylko const token jest. I ?H: definiujące linię HASCONST jest w sposób dorozumiany
strzeżony przez „?HASCONST”. Dlatego musimy dodać wyraźne ograniczenie „?%<”, aby to stwierdzić
metakonfiguracja że te linie powinny zostać uwzględnione konfiguracja_h.SH zawsze, gdy pojawia się symbol „%<”.
jest poszukiwany (%< odnosi się tutaj do nazwy jednostki d_const).

To prawie idealne, ponieważ linia ?W: będzie chciała d_const ilekroć const jest używany, to
linie ?H: zostaną uwzględnione w pliku konfiguracja_h.SH plik. Jednak wiodący komentarz (?C:
linie) dołączone do HASCONST sam jest również strzeżony przez HASCONST, tj. ma wartość domyślną
Ograniczenie „?HASCONST”. Stąd potrzeba aliasing dotychczasowy HASCONST symbol na „%<”.

Pozostała część jednostki (część skorupy) jest naprawdę prosta. To po prostu
próbuje skompilować przykładowy program w C przy użyciu const słowo kluczowe. Jeśli będzie to możliwe, to tak się stanie
określić $d_const za pośrednictwem $setvar funkcja (zdefiniowana przez Ustawiona zmienna jednostka). Zobacz akapit
o jednostkach specjalnych, aby uzyskać więcej informacji.

Spraw, żeby Polecenia
W linii poleceń ?MAKE: możesz napisać polecenie powłoki, które będzie wykonane w niezmienionej postaci lub a
specjalny -wybierać polecenie, które jest uwięzione przez metakonfiguracja i przeanalizowane, aby zobaczyć, co powinno być
zrobione. Wiodące „-” ma jedynie zapobiegać robić przed niepowodzeniem, gdy polecenie powróci
status niezerowy — nie jest tak naprawdę potrzebny, ponieważ używamy „robić -n', aby rozwiązać
zależności, ale radzę zachować go na wypadek, gdyby stał się obowiązkowy w przyszłych wersjach.
Składnia wybierać polecenie to:

-wybierać cmd $@ plik docelowy

gdzie $@ to standardowe makro w Makefiles oznaczające bieżący cel (nazwa
budowanego urządzenia, z usuniętym końcowym przedłużeniem .U). The cmd część to
rzeczywisty metakonfiguracja polecenie do wykonania i plik docelowy to kolejny parametr, którego
interpretacja zależy od cmd samo. Usunięto również ostateczne rozszerzenie .U i
zwykle odnosi się do pliku jednostkowego, chyba że zaczyna się od „./”, w którym to przypadku odnosi się do jednego
ukończenia metakonfiguracja pliki kontrolne w „.MT katalogiem.

Dostępne polecenia to:

dodaj Dodaje plik docelowy do Konfigurowanie.

dodaj.Config_sh
Wypełnia tę część Konfigurowanie produkujący config.sh plik. Tylko używany
zmienne są dodawane, zmienne warunkowe (z zależności warunkowych).
pominięto.

add.Null Dodaje sekcję inicjującą wszystkie używane zmienne powłoki do pustego ciągu.

c_h_weed Tworzy konfiguracja_h.SH plik. Drukowane są tylko niezbędne linie.

cm_h_weed Tworzy confmagic.h plik. Drukowane są tylko niezbędne linie. Ten
polecenie jest włączone tylko wtedy, gdy -M przełącznik jest podany lub gdy a confmagic.h filet
już istnieje.

zamknij.Config_sh
Dodaje ostatni symbol „EOT” w osobnej linii, aby zakończyć dokument tutaj
konstrukcja produkująca config.sh plik.

prepend Dołącza zawartość celu do plik docelowy jeśli ten plik nie jest pusty.

chwast Dodaje jednostkę do Konfigurowanie jak Dodaj polecenie, ale wykonaj kilka dodatkowych testów
aby usunąć '?symbol' I '%symbol'linie z plik docelowy jeśli symbol
nie jest pożądany lub warunkowo pożądany. Formularz „%” jest używany wyłącznie wewnętrznie przez
metakonfiguracja jednocześnie tworząc własne pliki .U w formacie „.MT'katalog.

wytrzeć Tak samo jak Dodaj naprawdę, ale wykonuje dodatkową substytucję makra. The
dostępne makra opisano w Przewodowych Makra ustęp.

Na marginesie metakonfiguracja generuje -warunek polecenie wewnętrznie, aby poradzić sobie z warunkowym
zależności. Nie powinieneś używać go samodzielnie, ale zobaczysz to podczas skanowania
wygenerowane Makefile .MT katalogiem.

Przewodowych Makra
Następujące makra są rozpoznawane przez Przetrzyj polecenie i podstawione przed włączeniem do
Konfigurowanie:

Podstawowy numer wersji pakietu, pochodzący z .pakiet.

Aktualna data.


Adres e-mail opiekuna tego pakietu, pochodzący z Twojego
.pakiet.


Nazwa pakietu, pochodząca od pliku .pakiet plik.


Poziom poprawki metakonfiguracja program (przestarzałe na rzecz ).


Poziom wersji SVN metakonfiguracja program.

Numer wersji metakonfiguracja program.

Makra te służą głównie do identyfikacji metakonfiguracja wersja, która wygenerowała plik a
szczególny Konfigurowanie skrypt i dla jakiego pakietu zostało to zrobione. Adres e-mail ww
opiekuna jest to zapisane w wiodących instrukcjach Konfigurowanie drukuje podczas uruchamiania.

Niedawny metakonfiguracja wersje rozumieją znacznie bardziej ogólną składnię formularza:

<$zmienna>

który jest zastępowany w czasie generowania konfiguracji przez wartość zmienna wzięte z twojego
.pakiet plik. Ostatecznie stary, podłączony na stałe format makr zniknie, a <$baserev>
będzie zastąpiony we wszystkich dostarczonych jednostkach.

Specjalny Jednostki
Następujące jednostki specjalne służą do faktoryzacji kodu i zapewnienia wyższego poziomu
funkcjonalności. Tworzą albo skrypt powłoki, który można pozyskać, albo powłokę
zmienna, jaka może być evalwyd. Przekazywanie parametrów odbywa się również za pośrednictwem dobrze znanych zmiennych
nazwane lub anonimowe, np. 1 $, 2 $ itd. (co można łatwo ustawić za pomocą powłoki zestaw
operator). Gdy Konfigurowanie wykonuje, tworzy i przechodzi do pliku a UU katalog, więc każdy
wyprodukowany skrypt leży tam i nie koliduje z plikami z Twojego pakietu.

Oto jednostki specjalne, o których powinieneś wiedzieć i jak z nich korzystać.

Cppsym.U
Jednostka ta generuje skrypt powłoki o nazwie Cppsym, które można wykorzystać do określenia
czy dowolny symbol na liście jest zdefiniowany przez posiadany preprocesor C lub kompilator C
określony. Może określić status dowolnego symbolu, chociaż symbole w
(lista atrybutów) są łatwiejsze do ustalenia.

Csym.U
Ustawia zmienną powłoki $csym, używaną wewnętrznie przez Konfigurowanie sprawdzić, czy
dany symbol C jest zdefiniowany czy nie. Typowe zastosowanie to:

ustaw wynik symbolu [-fva] [poprzedni]
ewal $csym

To ustawi dalsze zmienną na „true”, jeśli funkcja [-f], zmienna [-v] lub
zdefiniowano tablicę [-a], w przeciwnym razie „false”. Jeśli podana jest poprzednia wartość i -r
przełącznik został dostarczony Konfigurowanie (Patrz Konfigurowanie Opcje akapit), to wtedy
wartość jest ponownie wykorzystywana bez kwestionowania.

Sposób wykonania tego obliczenia zależy od odpowiedzi udzielonej przez użytkownika na pytanie
Konfigurowanie zapyta, czy powinien wykonać nm ekstrakcja czy nie. Jeśli
ekstrakcja została przeprowadzona, urządzenie po prostu przegląda listę symboli, w przeciwnym razie
wykonuje test łącza kompilacji, chyba że -r dano do ponownego wykorzystania wcześniej obliczonego
wartość, naturalnie...

Koniec.U
Kopiując to urządzenie do pliku prywatnego U katalog i dołączanie zależności do pliku
?MAKE: linia, do której możesz wymusić załadowanie danej jednostki Konfigurowanie nawet jeśli tak nie jest
inaczej chciałem. Niektóre jednostki można jedynie do tego zmusić Konfigurowanie w ten sposób.

Filex.U
Jednostka ta tworzy skrypt powłoki plikexp który rozwinie nazwy plików zaczynające się od
tyldy. Typowe zastosowanie to:

exp_name=`./filex $nazwa`

aby przypisać rozszerzoną nazwę pliku nazwa_eks.

Znajdźhdr.U
Jednostka ta produkuje znajdźhdr skrypt używany do lokalizowania plików nagłówkowych
$usrinc lub w innych dziwniejszych miejscach korzystających z możliwości cpp. Skrypt otrzymuje
zawiera podstawową nazwę pliku, taką jak „stdio.h” lub „sys/file.h” i zwraca pełną ścieżkę
plik inlcude i status zerowy, jeśli zostanie znaleziony, lub pusty ciąg znaków i status niezerowy
jeśli nie udało się zlokalizować pliku.

Getfile.U
Jednostka ta generuje fragment kodu powłoki, który należy pobrać, aby uzyskać plik
podaj nazwę i sprawdź, czy jesteś zdrowy na umyśle. Opcjonalnie wykonywane jest rozwinięcie ~name.

Aby korzystać z tego urządzenia, $RP i $dflt musi zawierać pytanie i domyślną odpowiedź, która
zostanie przekazany w niezmienionej postaci do mójprzeczytany skrypt (patrz wkrótce Myread.U). $fn
zmienna steruje operacją i zwracany jest wynik $an.

Aby zlokalizować plik lub katalog, wpisz „f” lub „d”. k~/. Jeśli pojawi się „~”, to ~name
zamiana jest dozwolona. Jeśli pojawi się znak „/”, akceptowane są tylko bezwzględne nazwy ścieżek i
Podstawienia ~name są zawsze rozwijane przed powrotem. Jeśli określono „+”,
kontrole istnienia są pomijane. Jeśli w środku pojawi się „n”. $fn, wówczas użytkownik może to zrobić
odpowiedz „żadne”.

Zwykle, jeśli nie poprosiłeś o przenośność, na żądanie następuje podstawienie ~name.
Są jednak chwile, w których chcesz ominąć przenośność i wymusić
podstawienie. Możesz w tym celu użyć litery „e” (rozwiń).

Jeśli używany jest specjalny typ „l” (lokalizacja), wówczas plik $fn zmienna musi kończyć się znakiem „:”,
po którym następuje nazwa bazowa pliku. Jeśli odpowiedzią jest katalog, podstawowa nazwa pliku będzie brzmieć
dołączony przed sprawdzeniem istnienia pliku. Jest to przydatne w przypadku pytań w stylu lokalizacji
lubię to:

dflt='~wiadomości/lib'
: nie ma potrzeby określania „d” lub „f”, gdy używane jest „l”.
fn='l~:aktywny'
rp='Gdzie jest aktywny plik?'
. ./dostać plik
aktywny="$odpowiedzi"

Dodatkowo litera „p” (ścieżka) może być używana w połączeniu z „l”, aby to powiedzieć
dostać plik że odpowiedź bez znaku „/” powinna zostać zaakceptowana, zakładając, że tak będzie
znajdować się w ścieżce każdego użytkownika w momencie, gdy ta wartość będzie potrzebna.

Przydatna jest także możliwość określenia listy odpowiedzi, które mają zostać zaakceptowane
dosłownie, z pominięciem wszelkich kontroli. Lista ta musi być ujęta w nawiasy i elementy
muszą być oddzielone przecinkami, bez przeplatających się spacji. Nie zapomnij zacytować
wynikowy ciąg znaków, ponieważ nawiasy mają znaczenie dla powłoki. Na przykład:

dflt='/bin/instalacja'
fn='/fe~(zainstaluj,./zainstaluj)'
rp='Użyć jakiego programu instalacyjnego?'
. ./dostać plik
zainstaluj="$ans"

pozwoliłoby użytkownikowi określić jedynie w pełni kwalifikowane ścieżki odnoszące się do istniejących plików,
ale nadal zezwalaj na specjalne odpowiedzi „install” i „./install” w niezmienionym stanie (zakładając, że
oczywiście coś się nimi zajmie, szczególnie na późniejszym etapie łańcucha, ponieważ tak się dzieje
niezgodne z ogólną oczekiwaną ramą).

Jeśli odpowiedź na pytanie brzmi „brak”, wówczas kontrole istnienia są pomijane i
zwracany jest pusty ciąg. Zauważ, że od dostać plik Połączenia mójprzeczytany wewnętrznie, wszystko
funkcje dostępne w mójprzeczytany zastosuj się tutaj do.

Jeśli potrzebna jest całkowicie rozwinięta wartość (na przykład w pliku Makefile), możesz użyć
dotychczasowy $przykład zmienna, która jest zawsze poprawnie skonfigurowana przez dostać plik jako rozszerzony
wersja $an. Oczywiście nie rozwinie ~name, jeśli nie zezwoliłeś na to w pliku
pierwsze miejsce w $fn zmienna.

Inhdr.U
Jednostka ta produkuje $inhdr zmienna powłoki, używana wewnętrznie przez Konfigurowanie do sprawdzenia
czy istnieje zestaw nagłówków, czy nie. Typowe zastosowanie to:

ustaw nagłówek i_header [ nagłówek2 i_header2 ... ]
wartość $inhdr

Spowoduje to wydrukowanie komunikatu informującego, czy nagłówek został znaleziony, czy nie, i ustawienie
i_nagłówek odpowiednio zmienna. Jeśli określono więcej niż jeden nagłówek, a pierwszy
nagłówek nie zostanie znaleziony, próbujemy następnego, aż lista będzie pusta lub zostanie znaleziona.

Inlibc.U
Jednostka ta produkuje $inlibc zmienna powłoki, używana wewnętrznie przez Konfigurowanie do sprawdzenia
czy dana funkcja C jest zdefiniowana, czy nie. Typowe zastosowanie to:

ustaw funkcję d_func
wartość $inlibc

Spowoduje to wydrukowanie komunikatu informującego, czy funkcja została znaleziona, czy nie i ustawiona
$d_funkcja odpowiednio. Wewnętrznie korzystał z $csym rutyna.

Lok.U
Ta ważna jednostka tworzy skrypt powłoki loc które można wykorzystać, aby dowiedzieć się, gdzie
na liście katalogów znajduje się dany plik. Pierwszy argument określa plik do
zostać zlokalizowany, drugi argument to wartość, która zostanie zwrócona, jeśli wyszukiwanie się nie powiedzie, oraz
pozostałe argumenty to lista katalogów, w których plik ma zostać przeszukany. Dla
instancja:

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

ustawiłoby $dflt do X jeśli nie sendmail.cf plik został znaleziony w wymienionych katalogach,
lub coś w tym stylu /usr/lib/sendmail.cf w niektórych systemach. Zobacz też Getfile.U.

MailAuthor.U
Aby móc wykonać tę jednostkę, należy ją uwzględnić w linii ?MAKE: własnego prywatnego End.U
to do Konfigurowanie. Oferuje użytkownikowi możliwość zarejestrowania się u autora, opcjonalnie
otrzymywanie powiadomień o nadejściu nowych poprawek lub otrzymywanie ich automatycznie po wydaniu.
Musisz zainstalować agent pocztowy aby to zrobić (przynajmniej wersja 3.0).

MailList.U
Aby móc wykonać tę jednostkę, należy ją uwzględnić w linii ?MAKE: własnego prywatnego End.U
to do Konfigurowanie. Oferuje użytkownikowi możliwość zapisania się lub wypisania z listy mailingowej
gdzie toczą się dyskusje na temat pakietu. Musisz biec pakinit
i odpowiedz na pytania związane z listą mailingową, aby ustawić odpowiednie zmienne w pliku
.pakiet zanim urządzenie będzie mogło zacząć działać.

Myinit.U
Skopiuj tę jednostkę do swojego prywatnego U katalog, aby dodać do niektórych własne wartości domyślne
zmienne wewnętrzne. To urządzenie jest załadowane do Konfigurowanie w końcu domyślnie
inicjalizacje zostały wykonane.

Myread.U
Jednostka ta produkuje mójprzeczytany skrypt powłoki, który musi zostać pobrany, aby wykonać
Czytać. Umożliwia ucieczkę z powłoki, domyślne przypisanie i ocenę parametrów, jak np
udokumentowane w jednostce Instruct.U. Umożliwia także dynamiczne ustawienie -d opcja,
który będzie używany w pozostałej części wykonania skryptu.

Aby korzystać z tego urządzenia, $RP musi trzymać pytanie i $dflt powinien zawierać wartość domyślną
odpowiedź. Pytanie zostanie wydrukowane przez sam skrypt, a wynik zostanie zwrócony
$an zmienna.

Oto typowe użycie:

dflt='y'
rp='Pytanie?'
. ./mojczytaj
wartość="$ans"

Więcej informacji można znaleźć w samym urządzeniu.

Oldconfig.U
Ta jednostka musi być częścią linii zależności ?MAKE:, gdy niektóre z twoich jednostek próbują
aby ponownie użyć starej wartości symbolu. Jednostka ta jest odpowiedzialna za uzyskanie starych odpowiedzi
od config.sh lub udzielanie przydatnych wskazówek podczas uruchamiania na danej platformie dla
pierwszy raz. Zobacz Konfigurowanie Wskazówki akapit, aby uzyskać więcej informacji na temat podpowiedzi.

Przedrostek.U
Celem tego urządzenia jest wykrywanie zmian w katalogu z prefiksem instalacyjnym
automatycznie oblicz odpowiednie wartości domyślne z poprzednich odpowiedzi. Opiera się na
wartość $staryprzedrostek zmienna, która przechowuje poprzedni katalog przedrostków, gdy jest
zmieniony i w przeciwnym razie jest pusty. Na przykład, jeśli prefiks został zmieniony z / opt do
/ Usr / local, wówczas poprzedni binarny katalog instalacyjny zostanie zmieniony
/opt/kosz do / usr / local / binlub pozostanie niezmieniony, jeśli był, powiedzmy, /kosz.

Musisz zadzwonić zestaw przed wydaniem eval on $przedrostek, Takie jak:

set dflt var [katalog]
eval $przedrostek

co by ustaliło $dflt do $zmienna or $prefiks/reż w zależności od tego, czy przedrostek pozostał
to samo, czy nie. Jeśli reż jest struna? Żaden, wartość pojedynczej spacji w $dflt jest zachowywany jako-
jest, nawet jeśli przedrostek się zmienia. Jeśli reż jest pominięty, to $dflt jest ustawiony na pusty
string, jeśli prefiks został zmieniony, na $zmienna Inaczej.

Prefiks.U
Cel tego modułu jest podobny do Prefixit.U, tj. pomaga naprawić
domyślny ciąg uwzględniający zmiany prefiksów. Jednak zmienna powłoki $prefiks,
po ocenie przywróci tylko rozszerzenia ~name, należy przedrostkiem użyć takiej ucieczki
mechanizm. Użyj go jako:

ustaw dflt
eval $przedrostek

przed zapytaniem przez dostać plik na przykład. Jeśli przedrostek nie korzysta z ~name
ekspansji, wówczas powyższe nie będzie możliwe w przypadku y zmienne, naturalnie.

typedef.U
Jednostka ta produkuje $wpisany def zmienna powłoki, używana wewnętrznie przez Konfigurowanie do sprawdzenia
czy typedef istnieje, czy nie. Typowe zastosowanie to:

ustaw typedef val_t default [zawiera]
ewal $typedef

Spowoduje to ustawienie zmiennej wartość_t do wartości domyślnym jeśli nie znaleziono typedef
spośród wymienionych plików dołączanych lub do typedef Jeśli znaleziono. Jeśli nie ma plików dołączanych
określony, urządzenie sprawdza tylko. Jeśli określisz tylko niektóre elementy, to
na nich się patrzy.

Unix.U
Celem tej jednostki jest zdefiniowanie niektórych z najpopularniejszych systemów UNIX za pomocą zmiennych
które można zmienić z wiersza poleceń lub za pomocą odpowiednich plików podpowiedzi. W szczególności,
$_exe, $_o i $_a są ustawione. Wszystkie jednostki powinny się odnosić $_o i nie do .o bezpośrednio.
„.” jest częścią tych zmiennych.

Ustawiona zmienna
Jednostka ta generuje zmienną, która jest używana wewnętrznie przez Konfigurowanie ustawić
określić/undef wartość dla danego symbolu, emitując ostrzeżenie w przypadku nagłej zmiany
od poprzedniej wartości. Na przykład:

wartość="$definiuj"
ustaw zmienną d
ewal $zmienna zadana

Jeśli poprzedni $d_zmienna wartość była różna od null i $ wartość jest inaczej, „whoa”
wydawane jest ostrzeżenie.

Whoa.U
Jednostka ta produkuje whoa skrypt, który emituje ostrzeżenie, gdy plik wartość w zmiennej
Czyje imię to $zmienna nie jest taka sama, jak jej stara poprzednia wartość $było. Od
powrót, $td i $tu przytrzymaj odpowiednią wartość określić or nieokreślony zmienna. Widzieć
przykłady w Inlibc.U.

Wbudowany Preprocesor
Każda jednostka, która ma zostać uwzględniona Konfigurowanie przetwarzany jest przez wbudowany preprocesor. Przed-
instrukcje procesora są rozpoczynane znakiem „@” („#” jest komentarzem powłoki
postać). Działa podobnie jak preprocesor C, ale pozwala na użycie powłoki i Perla
ucieka. Oto dostępne funkcje:

@Jeśli wyrażenie
If wyrażenie ma wartość true, kontynuuj ładowanie kodu aż do @end, @elsif lub @else.

@elsif wyrażenie
Alternatywny wybór. Jeśli wyrażenie ma wartość true, kontynuuj ładowanie kodu aż do @end,
inny @elsif lub @else.

@else Domyślny kod do załadowania, jeśli @if wyrażenie było fałszywe i żadne z nich
opcjonalnie dopasowane @elsif. Załaduj do @końca.

@end Zamknij instrukcję ładowania warunkowego otwartą przez @if.

@definiować symbol
Mówi to preprocesorowi symbol jest zdefiniowany od teraz.

Warunek wyrażenie może zawierać nazwy symboli (wartość ma wartość true, jeśli potrzebny jest symbol lub
zdefiniowany przez @definiować lub ucieczki powłoki/Perla. Atomy te można łączyć za pomocą
tradycyjne operatory logiczne '!' dla negacji, „&&” dla logicznego i oraz „||” za logiczne
lub.

Tekst zawarty w pojedynczych nawiasach jest testem powłoki, natomiast tekst zawarty w podwójnych nawiasach jest testem
test Perla. Mianowicie wyrażenia:

{ powłoka XNUMX }
{{ Perl XNUMX }}

tłumaczone są na:

if powłoka XNUMX >/dev/null 2>&1; następnie wyjdź 0; w przeciwnym razie wyjście 1; fi
Jeśli (Perl XNUMX) {wyjście 0;} else {wyjście 1;}

a status wyjścia jest używany w standardowy sposób do uzyskania wartości logicznej, tj. 0 jest prawdą i
wszystko inne jest fałszywe. Należy pamiętać, że w języku Perl można wyrazić tylko proste warunki, dopóki
można w nim załadować jakiś złożony kod metakonfiguracja i wykonane.

Wbudowany preprocesor może zostać wykorzystany do precyzyjnego dostrojenia niektórych jednostek (patrz d_getname.U dla
złożony przykład) w zależności od symboli faktycznie używanych przez program lub pliki
obecne w dystrybucji. Na przykład Oldconfig.U używa testu takiego jak:

@if {test -d ../wskazówki}

i Konfigurowanie będzie zawierać kod zależny od podpowiedzi tylko wtedy, gdy istnieje wskazówki katalog w
katalog najwyższego poziomu pakietu. Należy pamiętać, że testy są uruchamiane z poziomu '.MT'katalog,
stąd potrzebne „../” w teście.

Preprocesora można również użyć, aby uniknąć umieszczania bezużytecznego kodu, gdy symbol nie jest
zdefiniowany. Jednostki definiujące więcej niż jeden symbol mogą być chronione w ten sposób (ponieważ jednostka jest
ładowany jako całość), zbierając kod zależny od symboli w parze @if/@end. Dla
instancja:

@if I_CZAS || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='true'
@w przeciwnym razie
need_time_h='false'
@koniec

sprawdzi, czy kod źródłowy w jakikolwiek sposób wykorzystuje jeden z trzech symboli kontrolujących
dotychczasowy czas. h or sys/time.h włączenie i odpowiednio zdefiniuj symbol powłoki. To daje
Konfigurowanie informację zwrotną na temat potrzeb źródeł i uniknąć wady polegającej na naprawie
zamrożone jednostki.

Za pomocą linii „?W:” możesz uzyskać ciekawe kombinacje. Na przykład i_time.U jednostka
musi wiedzieć, czy źródła C w jakikolwiek sposób korzystają z struct stref czasowych typ. Dlatego,
linia:

?W::strefa czasowa

jest używany ze względu na efekt uboczny definiowania symbolu stref czasowych dla preprocesora. The
kod jednostki może następnie powiedzieć:

@if strefa czasowa
dla s_timezone w '-DS_TIMEZONE' ''; Do
@w przeciwnym razie
s_timezone=''
@koniec

... kod używając s_timezone ...

@if strefa czasowa
zrobić
@koniec

i wykonaj dodatkową pętlę, próbując uzyskać dwie kolejne wartości dla s_strefa czasowa zmienna, ale tylko
Jeśli potrzebne.

Przestarzały Symbolika
Przestarzałe symbole zostały zachowane, aby ułatwić przejście na starsze metakonfiguracja jednostki. Chyba że
dotychczasowy -o przełącznik jest przekazywany do metakonfiguracja zostaną zignorowani. Jednakże, Przestarzały plik będzie
zostanie wygenerowany, informując Cię, które pliki wykorzystują te przestarzałe symbole i co
są nowe symbole, które należy stosować.

Czas życia przestarzałych symboli wynosi jedną pełną wersję, tj. zostaną one usunięte, gdy
wydawana jest następna wersja podstawowa (oczywiście aktualizacje łatek nie liczą się). Dlatego tak jest
mądrze jest przetłumaczyć źródła i jak najszybciej zacząć używać nowych symboli.

Konfigurowanie Wskazówki
Może się zdarzyć, że wewnętrzna logika konfiguracji dokona błędnych wyborów. Dla
na przykład na niektórych platformach plik vfork() wywołanie systemowe jest obecne, ale uszkodzone, więc powinno
nie być używany. Nie da się tej wiedzy zawrzeć w samych jednostkach, bo
może to być tymczasowy problem, który sprzedawca ostatecznie rozwiąże, lub coś podobnego
został wprowadzony poprzez nową aktualizację systemu operacyjnego.

W każdym razie, w przypadku wszystkich tych drobnych problemów, które są zbyt specyficzne dla systemu, metakonfiguracja
zapewnia obsługę plików podpowiedzi. Aby z niego skorzystać, musisz utworzyć plik wskazówki katalog w
katalog najwyższego poziomu pakietu i miej go po uruchomieniu metakonfiguracja. To załaduje
część dotycząca podpowiedzi z Oldconfig.U.

Od tego momentu możesz wstępnie ustawić niektóre zmienne powłoki Konfigurowanie używa w specyficznym systemie operacyjnym
plik .sh. Jest w nim kod Oldconfig.U który próbuje odgadnąć, które pliki podpowiedzi są potrzebne
obliczanie standardowej nazwy na podstawie nazwy systemu operacyjnego, nazwy jądra i wydania
numer itp. Ponieważ informacje te mogą się szybko zmieniać, nie będę ich dokumentować
Tutaj. Musisz dokonać inżynierii wstecznej kodu z Oldconfig.U.

Kiedy po raz pierwszy wypuścisz pakiet, katalog plików podpowiedzi powinien być pusty. Jeśli
użytkownicy Twojego pakietu skarżą się, że mają z tym problem Konfigurowanie domyślnie na a
konkretnego systemu, musisz sprawdzić, czy jest to problem specyficzny dla platformy, czy też
ogólny. W pierwszym przypadku czas wprowadzić nowy plik podpowiedzi, natomiast w pliku
w tym drugim przypadku należy skorygować odpowiednią jednostkę.

Na przykład wiadomo, że systemy SGI są zepsute vfork() wywołanie systemowe, począwszy od tego
pismo. Odpowiednia nazwa pliku podpowiedzi to sgi.sh. Więc wszystko, co musisz zrobić, to stworzyć
a wskazówki/sgi.sh plik w którym piszesz:

d_vfork="$definiuj"

który zawsze będzie ponownie mapowany widelec on widelec (Patrz d_vfork.U). Podczas pracy w systemach SGI dla
pierwszy raz, Konfigurowanie wykryje, że istnieje wskazówki/sgi.sh plik i na tym zaczynamy
maszynę IRIX (nazwa jądra to często /irix), dlatego zaproponuje Sgi jak
możliwa wskazówka. Jeśli użytkownik to zaakceptuje i ponieważ $d_vfork wartość jest modyfikowana poprzez
$setvar zadzwoń zaraz! zostanie wyemitowany, aby ostrzec, że zaraz nadpiszemy tę wartość
obliczone przez Konfigurowanie.

Pamiętaj, że nie musisz podawać cała kolekcja wskazówki znane przez Oldconfig.U. Jeśli plik podpowiedzi to
brakuje, nie zostanie zaproponowany jako możliwy wybór. Testy heurystyczne wymagały obliczeń
potencjalni kandydaci na wskazówki są niestabilni. Jeśli masz nowe wartości lub inne testy, proszę
Wyślij je do mnie...

Nadrzędny Twój wybór:
Jeśli utworzysz konfiguracja.ponad plik w katalogu najwyższego poziomu, Konfigurowanie zapyta cię, czy ty
chcesz go załadować, aby zastąpić wartości domyślne. Odbywa się to przed utworzeniem pliku
config.sh plik, więc daje ci to szansę na załatanie wartości tam przechowywanych.

Różni się to od podejścia podpowiedzi tym, że jest to plik lokalny, którym jest użytkownik
swobodnie tworzyć na własny użytek. Nie powinieneś sam dostarczać takiego pliku, ale pozwól
użytkownik wiedział o tej możliwości.

Konfigurowanie Opcje
Połączenia Konfigurowanie skrypt można wywołać z pewnymi opcjami określonymi w wierszu poleceń, to
nieznacznie zmodyfikować swoje zachowanie. Oto dozwolone opcje:

-d Użyj wartości domyślnych dla wszystkich odpowiedzi.

-e Kontynuuj bez kwestionowania przeszłości produkcji config.sh.

-f filet Użyj określonego pliku jako konfiguracji domyślnej. Jeśli ten przełącznik nie jest używany,
konfiguracja jest pobierana z config.sh, gdy jest obecny.

-h Wydrukuj wiadomość pomocy i wyjdź.

-r Jeśli to możliwe, użyj ponownie wartości symboli C. To pominie to, co kosztowne nm symbol
ekstrakcja. Jeśli używany jest po raz pierwszy (bez wcześniejszego pliku konfiguracyjnego),
Konfigurowanie spróbuję skompilować i połączyć mały program, aby się o tym dowiedzieć
obecność symbolu lub jego brak.

-s Tryb cichy. Tylko ciągi znaków wydrukowane na deskryptorze pliku nr 4 będą widoczne w pliku
ekranie (to ważne komunikaty). Całkowite wyłączenie nie jest możliwe
dowolne wyjście, ale możesz użyć „Konfigurowanie -dery > / dev / null 2> & 1'mieć pełnię
uruchamianie wsadowe bez danych wyjściowych i bez konieczności interakcji z użytkownikiem.

-D symbol=wartość
Wstępnie definiuje symbol znieść określone wartość. Możliwe jest także użycie '-D
symbol', który użyje domyślnej wartości „zdefiniuj”.

-E Zatrzymaj się na końcu pytań konfiguracyjnych, po stworzeniu pliku a
config.sh. To nie spowoduje wykonania żadnego 'robić zależeć' lub ekstrakcja plików .SH.

-K Świadomy użytkownik. Korzystając z tej opcji, wiesz, co robisz i
Dlatego też config.sh plik będzie zawsze traktowany tak, jakby był zamierzony
ponownie wykorzystane, nawet jeśli mogły zostać wygenerowane w systemie obcym. To także
zapobiega przerywaniu, gdy Konfigurowanie wykrywa bezużyteczny kompilator C lub błędny zestaw
flag C. Za pomocą tej opcji można włączyć dalsze skróty w pliku
przyszły. Opcja ta jest udokumentowana w pliku Konfigurowanie komunikat o użyciu, aby nam o tym przypomnieć
o jego istnieniu, ale mamy nadzieję, że podany opis będzie wystarczająco tajemniczy.
:-)

-O Zezwalaj na wartości określone za pomocą a -D or -U aby zastąpić ustawienia z dowolnego załadowanego pliku
plik konfiguracyjny. Nie jest to zachowanie domyślne, ponieważ przesłonięcie będzie
nie będą propagowane do zmiennych pochodzących od tych, które aktualnie zmieniasz.
Naturalnie, bez -O, ustawienie jest wykonywane tylko wtedy, gdy nie ma pliku konfiguracyjnego
załadowane, co jest bezpieczne, ponieważ zmienne pochodne nie zostały jeszcze obliczone...

-S Wykonaj podstawienie zmiennych we wszystkich plikach .SH. Można to połączyć z
-f przełącznik, aby propagować dowolną konfigurację.

-U symbol=
Gotowe zestawy symbol mieć pustą wartość. Możliwe jest także użycie '-U symbol'
który ustawi symbol do „undef”.

-V Wydrukuj numer wersji pliku metakonfiguracja które to wygenerowało Konfigurowanie scenariusz
i wyjść.

Bieganie Środowisko
Po uruchomieniu Konfigurowanie tworzy lokalny UU katalogu i uruchamia się z niego. Katalog
jest usuwany po zakończeniu konfiguracji, ale oznacza to, że musisz uruchomić skrypt z miejsca, w którym
możesz pisać, tj. nie z systemu plików tylko do odczytu.

Możesz biegać Konfigurowanie jednak zdalnie, jak w:

../pakiet/Konfiguruj

aby skonfigurować źródła, które nie są obecne lokalnie. Wszystkie wygenerowane pliki zostaną umieszczone
katalog, z którego uruchamiasz skrypt. Ta magia odbywa się dzięki src.U
jednostka, która ustawia $źródło i $rsrc zmienne wskazujące źródła pakietu. To
ścieżka jest pełna lub względna, w zależności od tego, czy Konfigurowanie został wywołany za pomocą pełnego or
względna ścieżka dostępu.

Od wewnątrz UU podkatalog, którego możesz użyć $rsrc aby uzyskać dostęp do plików źródłowych (units
Odnosząc się do wskazówek dotyczących linków do plików źródłowych należy zawsze korzystać z tego mechanizmu i nie zakładać
plik znajduje się w katalogu nadrzędnym). Wszystkie pliki Makefile powinny używać zmiennej $src
jako wskaźnik do źródeł z góry katalogu kompilacji (gdzie Konfigurowanie prowadzony jest),
bezpośrednio lub poprzez ustawienie VPATH.

Podczas biegu Konfigurowanie zdalnie pliki .SH są wyodrębniane w katalogu kompilacji, a nie
w drzewie źródłowym. Wymaga to jednak pewnego rodzaju a robić wsparcie, aby móc się skompilować
rzeczy w katalogu kompilacji, podczas gdy źródła znajdują się gdzie indziej.

Korzystanie z magia Redefinicje
Korzystając z ww -M przełącznika, niektóre magiczne remapowania mogą mieć miejsce w ciągu confmagic.h
plik. Ten plik musi zostać dołączony później konfiguracja.h, oczywiście, ale także po tym wszystkim
inne potrzebne pliki obejmują. Mianowicie:

#include „config.h”
...
... inny wtrącenia ...
...
#include „confmagic.h”

Zazwyczaj confmagic.h spróbuje ponownie przypisać bkopia() on memcpy() jeśli nie bkopia() is
dostępne lokalnie lub przekształcić widelec najnowszych widelec gdy jest to konieczne, co czyni go bezużytecznym
martwić się o HAS_VFORK symbol.

Ta magia konfiguracji jest udokumentowana w pliku słownika.

Jednostka Szablony
W pliku . znajduje się zestaw szablonów jednostek metakonfiguracja katalog źródłowy, do którego są przeznaczone
być używany przez (jeszcze nie napisany) program do szybkiego tworzenia nowych jednostek dla różnego rodzaju
sytuacje. Brak dokumentacji do tego niedokończonego projektu, ale pomyślałem, że o tym wspomnę
na stronie podręcznika, na wypadek gdybyś chciał to zrobić sam, a następnie przesłać go...

AUTORSKI


Larry Wall[email chroniony]> dla wersji 2.0.
Harlana Stenna[email chroniony]> w przypadku ważnych rozszerzeń jednostek.
Raphael Manfredi[email chroniony]>.
Wielu innych autorów dla metakonfiguracja jednostki. Zobacz listę kredytów w pliku kredytowym.

Użyj metaconfig online, korzystając z usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

Komendy systemu Linux

Ad