Angielskifrancuskihiszpański

Ad


Ulubiona usługa OnWorks

jmake - Online w chmurze

Uruchom jmake w bezpłatnym hostingu OnWorks przez Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

To jest polecenie jmake, 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 Windows lub emulator online MAC OS

PROGRAM:

IMIĘ


jmake - ogólny kreator plików makefile

STRESZCZENIE


zrób [ Cpp Opcje ]

OPIS


Jmake buduje plik makefile z dość wysokiego poziomu opisu przechowywanego w Plik Jmake plik.
Wygenerowany plik to Makefile.SH zamiast prostego pliku makefile, co oznacza, że ​​jest gotowy
do stosowania w połączeniu z metakonfiguracja. W szczególności parametry takie jak „dokąd
zainstaluj pliki wykonywalne” zostanie automatycznie określona przez Konfigurowanie i tylko potrzebne
parametry zostaną wzięte pod uwagę.

Aby korzystać z zrób musisz napisać Plik Jmake pierwszy, który opisuje, jak mają być rzeczy
wybudowany. Twój Plik Jmake zostanie uwzględniony w ogólnym szablonie za pośrednictwem C pre-
edytor. Oznacza to, że możesz używać zwykłych komentarzy C /**/, ale nie powłoki #
uwagi. Komentarze C nie pojawią się w wygenerowanym Makefile.SH ale linie zaczynają się
z ;# w końcu pojawi się jako komentarze powłoki. Jeśli musisz wpisać ciąg /* w
wygenerowane Makefile.SH wtedy musisz uciec (w przeciwnym razie zrób pomyśli o tym jako o
początek komentarza C). Po prostu umieść # przed *, tak jak w /#*.

Masz do dyspozycji zestaw makr, a wszystkie te makra są wymienione w Indeksie
plik, wraz z fragmentem kodu, do którego zostaną rozwinięte. Zwykle Plik Jmake jest uczciwa
mały, a przez to łatwiejszy w utrzymaniu niż ogromny Plik Makefile. Niektóre wewnętrzne potężne polecenia
umożliwiają łatwe pisanie przenośnych plików makefile, bez konieczności wydawania wielu wysiłków,
bo ktoś inny już wykonał za Ciebie robotę :-).

Kiedy chcesz wygenerować swój plik makefile, zwykle nie uruchamiasz zrób ale użyj jmkmf
skrypt, który jest opakowaniem i będzie się wywoływał zrób z poprawnymi opcjami.

Cała wiedza o zrób jest przechowywany w dwóch plikach: szablon Jmake.tmpl i makro
plik definicji Zasady Jmake. Pierwszy plik zawiera drugi, wraz z
Plik jmake. Czasami trzeba wiedzieć, jak coś działa, aby móc prawidłowo używać
wszystkie dostarczone funkcje. Na przykład może być konieczne napisanie własnych reguł dla
konkretny projekt. Chociaż nie możesz nadpisać wstępnie zdefiniowanych reguł, możesz rozszerzyć
Jmake.zasady pliku lub po prostu dodaj swoje makra do swojego Plik jmake. Możesz także użyć #zawierać
instrukcji, gdy chcesz udostępnić te makra i nie chcesz duplikować kodu.

Składnia w Jmake.rules nie jest wcale elegancka, ale:

- Jest łatwy do parsowania (jak pliki sendmail.cf lub troff).
- Zasady nie mają się często zmieniać.
- Jest dość prosty do opanowania w pięć minut. :-)

Oto krótki opis:

1) radzić sobie z różnymi Cpp realizacje:

· Final @!\ oznacza: koniec linii, następna linia zaczyna się od lewego marginesu.
· Końcowy @@\ oznacza: koniec wiersza, następny wiersz ma być wcięty o jedną tabulator.

Na końcu każdej linii powinien zawsze znajdować się jeden z @!\ lub @@\. Jedyny
wyjątek dotyczy makr, które mają być używane jako część treści reguły (np
UsuńTargetProgram). W takim przypadku pierwsza linia (która zawiera #definiować) powinnam
zakończyć pojedynczym ukośnikiem odwrotnym.

2) Definicje symboli:

· >SYMBOL: definiuje symbol.
· ?SYMBOL: : trzyma jeśli SYMBOL jest zdefiniowany.
· %SYMBOL: : trzyma jeśli SYMBOL nie jest zdefiniowany.

?SYM może być zagnieżdżony (logiczne AND), jak w:

?SYMBOL:%TOKEN:tekst

który zachowa tekst, jeśli SYMBOL jest zdefiniowany, a TOKEN niezdefiniowany. Aby wdrożyć
logiczne LUB, patrz poniżej.

3) Testy docelowe plików Makefile:

· ?cel?: : trzyma jeśli cel definiuje.
· %cel%: : trzyma jeśli cel nie jest zdefiniowany.

Makefile cel jest definiowany jako samodzielny cel, na przykład
zależeć.lokalny cel, który zostałby zdefiniowany jako:

zależeć.lokalnie:

Należy również pamiętać, że jest to ważne tylko dla zdefiniowanych celów so daleko w wygenerowanym
makefile. Nie jest to predykat, który można wykorzystać do testowania celów, które:
zostaną ostatecznie zdefiniowane później w pokoleniu.

4) Polecenia:

Polecenia można przekazywać do zrób. Zaczynają się od wiodącego „|”. Dostępne polecenia
należą:

· |przyrostek : dodaje do listy .SUFFES: w pliku makefile.

· |zasada: : dodaje do sekcji zasad budowlanych.

· |zasada: : jak poprzednio, z wiodącą zakładką.

· |skip: pomija tekst do momentu znalezienia linii zaczynającej się od '-skip'.

· |subst: rozpoczyna sekcję, w której wiersze będą podlegały podstawieniu zmiennych,
dopóki nie zostanie znaleziony '-subst'. Oznacza to, że po uruchomieniu Makefile.SH wszystkie
wystąpienia zmiennej $var w obrębie rzeczownik sekcja zostanie zastąpiona powłoką.

· |powłoka: emituje sekcję do momentu dopasowania '-powłoki' tak, jak jest w wygenerowanym
Makefile.SH. Może to być przydatne do przygotowania |przypadek Sekcje. Nie jest
wolno zagnieździć się powłoka działy.

· |case: po tym poleceniu musi następować nazwa zmiennej powłoki (bez jej
wiodący znak „$”) i wzorzec w stylu wielkości liter, na przykład ciąg „var in
f*”. Wygeneruje odpowiedni test „przypadek” w Makefile.SH w dniu
wartość "$zmienna" i tylko wtedy, gdy ten test jest prawdziwy, sekcja będzie dostępna aż do
dopasowanie '-case' zostanie wygenerowane w Makefile po uruchomieniu Makefile.SH. Ono
można się zagnieździć walizka sekcje swobodnie.

· |rozwiń : rozwiń linie aż do '-rozwiń' z . Kompletny
przykład pokazano poniżej.

· |raz : tekst do '-raz' pojawia się tylko za pierwszym razem.

Znak „|” poleceń nie można zagnieżdżać, chyba że zaznaczono inaczej. W szczególności ze względu na:
prosta implementacja |pomiń, nie da się postawić |pomiń wewnątrz pominięte
część. Jednak |raz sekcja może mieć |pomiń Sekcje. Dozwolone jest gniazdowanie
|przypadek sekcje do woli.

Oto sposób na zaimplementowanie logicznego OR:

/* Implementuje SYMBOL lub nie TOKEN */
?SYMBOL:text /* Zachowuje tekst, jeśli SYMBOL */
%SYMBOL:|pomiń
%TOKEN:text /* Zachowuje tekst, jeśli nie TOKEN */
-pominąć

Właściwie to jest brzydkie, bo tekst musi pojawić się dwa razy. Na szczęście zrobiłem
nie używaj tej konstrukcji. :-)

Rzeczywiście, jak zapewne już zgadłeś, najlepszy sposób na zaimplementowanie logicznego OR
jest użycie prawa De Morgana:

nie (p lub q) <=> nie p i nie q

/* Implementuje SYMBOL lub nie TOKEN (próba #2) */
%SYMBOL:?TOKEN:|pomiń
text /* Jeśli SYMBOL czy nie TOKEN */
-pominąć

Kto powiedział, że nie dbają o logikę? ;-)

Ekspansja odbywa się za pomocą rozszerzać Komenda. Zostało to zapewnione, aby uniknąć niektórych
kłopotliwe zapisy w plikach makefile, gdy musisz powtarzać głupie linijki, które tylko
różnią się na przykład nazwami plików. Spójrzmy najpierw na przykład:

|rozwiń pasek!foo! b!tak nie!
!A::
echo !a, !b
-zwiększać

Następnie zostaną wydrukowane dwie reguły, a wartościami (a,b) dla pierwszej będą (foo,
tak), dla drugiego (pasek, nie). Zastąpienie jest kontrolowane przez „!” postać.
Jeśli słowo, które ma zostać podstawione, jest częścią innego, odłącz je za pomocą ^^ konstrukcji
jak w: !b^^c. Możliwe jest użycie makr Makefile w , i oni
zostanie rozszerzony o jmake. Jeśli nie tego chcesz, pomiń pierwszy znak „$”
(to jest wyjście Makefile, tzn. musisz podwoić '$', nie poprzedzać go znakiem
ukośnik wsteczny). // oznacza zerową wartość podstawienia.
Konstrukt ^^^ zachowuje się jak ^^, tzn. jest usuwany, ale usuwa również wszystkie
po spacji po ^^^. Jeśli dodasz coś do argumentu makra,
a ten argument makro został napisany ze spacjami przed nim, to pozwoli ci
połącz coś tuż przed ostateczną wartością tego argumentu.

Oto kolejny przykład pokazujący, jak można użyć makra Expand. To jest
zdefiniowane w Jmake.zasady jako:

#define Rozwiń(reguła, wzorzec) @!\
|rozwiń wzór @!\
reguła @!\
-zwiększać

Więc możemy pisać w Plik Jmake:

|pomiń
A = pasek foo
-pominąć

#define Reguła @!\
$(KATALOG)/!a^^.o: !a^^.o @@\
$(CC) -c !a^^.c @@\
$(MV) !a^^.o $(KIER)

Rozwiń(Reguła, a!$(A)!)

co wygeneruje w Makefile.SH:

$(DIR)/foo.o: foo.o
$(CC) -c foo.c
$(MV) foo.o $(DIR)

$(DIR)/bar.o: bar.o
$(CC) -c słupek.c
$(MV) bar.o $$(DIR)

Deklaracja „A” została otoczona pominąć, aby nie pojawiała się w
wygenerowany Makefile.SH, ale zostanie on uwzględniony przez zrób dla
substytucja we wzorcu.

Liczba rozwinięć jest określona przez liczbę możliwych wartości dla
drugim parametr. Jeśli inne parametry mają mniej wartości podstawienia, otrzymają
nieważne.

Możliwe jest dodanie wyrażenia regularnego na końcu '-expand'. To regularne
wyrażenie zostanie usunięte z końcowego zestawu rozwinięć na końcu każdej linii.
Możliwe jest również dokonywanie podstawień w rozwiniętym elemencie za pomocą składni
(jeśli 'f' jest zmienną rozszerzoną) !f:= gdzie i są dwa regularne
wyrażenia (bez spacji). Wzór zostanie zastąpiony przez wzór!
(tylko pierwsze wystąpienie zostanie zastąpione).

Na koniec możesz odwołać się w rozwiniętej sekcji do zmiennych, których wartość jest obliczana
za pomocą innego rozszerzenia, co ułatwia zdefiniowanie generycznego Pliki jmake.

Przykład:

SRC = foo.c bar.c
OBJ = \
|rozwiń f!$(SRC)!
!f:\.c=\.o \
-zwiększać \\
INK = \
|rozwiń f!$(OBJ)!
!f:\.o=\.h \
-zwiększać \\

co wygeneruje w Makefile.SH:

SRC = foo.c bar.c
OBJ = \
foo.o \
bar.o
INK = \
foo.h \
bar.h

Nie zapomnij chronić znaków specjalnych w wyrażeniach regularnych, takich jak
ukośnik odwrotny, punkt itp...

Połączenia pewnego razu polecenie jest oznaczone nazwą. Gdy imię pojawia się po raz pierwszy, raz
konstrukcja jest ignorowana, a tekst do '-raz' zostanie skopiowany do wygenerowanego
Makefile.SH. Jednak przyszłe wystąpienia tej samej nazwy będą ignorowane (pewnego razu
będzie się zachowywać jak pominąć).

Przykład:

|kiedy to_jest_nazwa

-pewnego razu

Połączenia powłoka Polecenie może być użyte do wygenerowania fragmentu powłoki w Makefile.SH. Do
na przykład następującą sekcję w pliku Jmakefile:

|powłoka
przypadek „$d_usegtk1” w
zdefiniuj) glib=1; gtk=1;;
to C
-muszla

spowoduje wygenerowanie załączonego fragmentu w Makefile.SH do obliczenia
wartości bez zająknienia i gtk zmienne oparte na zmiennej konfiguracyjnej
d_usegtk1 ustawić, uruchamiając Konfiguruj.

To z kolei może być wykorzystane w kolejnych walizka sekcje, aby aktywować części
Makefile tylko podczas budowania dla GTK1 przy użyciu glib-1.x:

|glib przypadku w 1
pokaz:
echo "Budynek dla glib-1.x"
-walizka

Ta sekcja wygeneruje coś takiego w Makefile.SH:

!NIE!SUBS!
przypadek "$glib" in
1)
$spitshell >>Makefile <<'!NIE!SUBS!'
pokaz:
echo "Budynek dla glib-1.x"
!NIE!SUBS!
;;
to C
$spitshell >>Makefile <<'!NIE!SUBS!'

A po uruchomieniu Makefile.SH powyższa reguła "wyświetlania" pojawi się tylko wtedy, gdy
budynek dla glib-1.x. Forma finału Makefile może zatem zależeć od
opcje konfiguracyjne wybrane, gdy Konfigurowanie został uruchomiony.

5) Inicjalizacje:

· + : Umieszcza całą linię w sekcji inicjalizacji.
· ++SYMBOL : Dodaje do makra SYMBOL.

6) Zmienne zdefiniowane przez użytkownika:

Użytkownik może zdefiniować CFLAGS, LDFLAGS lub DPFLAGS jako dodatkowe flagi do użycia w C
kompilacja, faza łączenia lub cel zależny. W ten sposób można dodać trochę więcej
flagi takie jak -I lub biblioteki dla plików Makefile w określonych podkatalogach.

Korzystaj z jmake online za pomocą usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

Komendy systemu Linux

Ad