jmake - Online w chmurze

To polecenie jmake, które można uruchomić w darmowym dostawcy hostingu OnWorks, korzystając z jednej z wielu naszych darmowych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS

PROGRAM:

IMIĘ


jmake - uniwersalny program do tworzenia plików makefile

STRESZCZENIE


zrób [ Cpp Opcje ]

OPIS


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

Aby korzystać z zrób musisz napisać Plik jmakefile po pierwsze, które opisuje sposób, w jaki rzeczy mają być
zbudowany. Twój Plik jmakefile zostanie uwzględniony w szablonie ogólnym za pomocą pre-C
procesora. Oznacza to, że możesz używać zwykłych komentarzy C /**/, ale nie powłoki #
komentarze. Komentarze C nie pojawią się w wygenerowanym Plik Makefile.SH ale linie zaczynające się
z ;# pojawi się ostatecznie jako komentarz powłoki. Jeśli musisz wpisać ciąg /* w
wygenerowane Plik Makefile.SH wtedy musisz z tego uciec (w przeciwnym razie zrób będę o tym myśleć jako o
początek komentarza C). Po prostu umieść # przed *, jak w /#*.

Masz do dyspozycji zestaw makr, a wszystkie te makra są wymienione w indeksie
plik wraz z fragmentem kodu, do którego się rozszerzą. Zwykle Plik jmakefile jest uczciwa
mały i 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 poświęcania im dużego wysiłku,
bo ktoś inny już zrobił to za Ciebie :-).

Gdy chcesz wygenerować swój plik makefile, zazwyczaj nie uruchamiasz zrób ale użyj jmkmf
skrypt, który jest opakowaniem i wywoła zrób z poprawnymi opcjami.

Cała wiedza zrób jest przechowywany w dwóch plikach: szablonie Plik Jmake.tmpl i makro
plik definicji Jmake.rules. Pierwszy plik zawiera drugi wraz z
Plik jmakefile. Czasami trzeba wiedzieć, jak coś działa, aby móc z tego poprawnie korzystać
wszystkie funkcje, które są dostępne. Na przykład, możesz musieć napisać własne zasady dla
konkretnego projektu. Chociaż nie można nadpisać wstępnie zdefiniowanych reguł, można rozszerzyć
Zasady Jmake plik lub po prostu dodaj swoje makra do Plik jmakefile. 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:

- Łatwy do parsowania (podobnie jak pliki sendmail.cf czy troff).
- Zasady nie powinny zmieniać się zbyt często.
- Jest na tyle prosta, że ​​można ją opanować w pięć minut. :-)

Oto krótki opis:

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

· Znak końcowy @!\ oznacza: koniec wiersza, następny wiersz zaczyna się od lewego marginesu.
· Końcowy @@\ oznacza: koniec wiersza, następny wiersz będzie wcięty o jeden tabulator.

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

2) Definicje symboli:

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

?SYM można zagnieżdżać (logiczne AND), jak w przykładzie:

?SYMBOL:%TOKEN:tekst

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

3) Testy docelowe pliku Makefile:

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

Plik makefile cel jest zdefiniowany jako samodzielny cel, na przykład
zależ.lokalnie cel, który można zdefiniować jako:

zależ.lokalnie:

Należy również pamiętać, że jest to ważne tylko dla celów zdefiniowanych so daleko w wygenerowanym
makefile. Nie jest to predykat, którego można użyć do testowania celów, które
zostaną ostatecznie zdefiniowane w dalszej części generacji.

4) Polecenia:

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

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

· |zasada: :dodaje do sekcji zasad budowlanych.

· |zasada: : tak samo jak poprzednio, z tabulatorem na początku.

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

· |subst: rozpoczyna sekcję, w której wiersze będą podlegać podstawieniu zmiennych,
dopóki nie zostanie znaleziony '-subst'. Oznacza to, że gdy zostanie uruchomiony Makefile.SH, wszystkie
wystąpienia $var w rzeczownik Sekcja zostanie zastąpiona przez powłokę.

· |shell: emituje sekcję do momentu dopasowania „-shell” w stanie, w jakim jest w wygenerowanym
Makefile.SH. Może być przydatny do przygotowania |przypadek sekcji. To nie jest
pozwolono 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 wielkości liter, na przykład ciąg „var in”
f*". Wygeneruje odpowiedni test „case” w pliku Makefile.SH na
wartość „$var” i tylko jeśli ten test jest prawdziwy, sekcja będzie do momentu
dopasowanie '-case' zostanie wygenerowane w pliku Makefile, gdy zostanie uruchomiony plik Makefile.SH.
możliwe jest zagnieżdżenie walizka sekcje swobodnie.

· |rozwiń :rozwiń wiersze do '-expand' za pomocą . Kompletny
przykład pokazano poniżej.

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

Polecenia '|' nie mogą być zagnieżdżane, chyba że zaznaczono inaczej. W szczególności, ze względu na
prosta implementacja |pomiń, nie da się tego umieścić |pomiń wewnątrz pominiętego
część. Jednakże, |raz sekcja może mieć |pomiń sekcje. Dozwolone jest zagnieżdżanie
|przypadek sekcje według uznania.

Oto sposób na zaimplementowanie logicznego LUB:

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

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

Rzeczywiście, jak zapewne już zgadłeś, najlepszym sposobem na wdrożenie logicznego LUB jest
polega na wykorzystaniu prawa De Morgana:

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

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

Kto powiedział, że nie obchodzi ich logika? ;-)

Rozszerzenie odbywa się za pomocą rozszerzać polecenie. Zostało ono dostarczone, aby uniknąć pewnych
uciążliwe zapisy w plikach makefile, gdy trzeba powtórzyć jakieś głupie linijki, które tylko
różnią się nazwami plików, na przykład. Spójrzmy najpierw na przykład:

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

Następnie zostaną wydrukowane dwie reguły, a wartości (a, b) dla pierwszej będą następujące: (foo,
tak), dla drugiego (tak, nie). Podstawianie jest kontrolowane przez znak '!'.
Jeżeli słowo, które ma zostać zastąpione, jest częścią innego, należy je oddzielić za pomocą konstrukcji ^^
jak w: !b^^c. Można używać makr Makefile w i oni
zostanie rozszerzony przez jmake. Jeśli nie jest to to, czego chcesz, usuń pierwszy znak '$'
(to ucieczka z Makefile, tzn. musisz podwoić znak „$”, a nie poprzedzać go znakiem
ukośnik). // oznacza wartość podstawienia null.
Konstrukcja ^^^ zachowuje się jak ^^, tzn. jest usuwana, ale usuwa również wszelkie
po znaku ^^^. Jeśli dodasz coś przed argumentem makra,
a ten argument makro został napisany ze spacjami przed nim, to pozwoli ci to
połącz coś tuż przed ostateczną wartością argumentu.

Oto kolejny przykład pokazujący jak można używać makra Expand. Jest to
zdefiniowane w Zasady Jmake jako:

#define Expand(rule, pattern) @!
|expand pattern @!
rule @!
-zwiększać

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

|pomiń
A = pasek foo
-pominąć

#define Rule @!
$(DIR)/!a^^.o: !a^^.o @@
$(CC) -c !a^^.c @@
$(MV) !a^^.o $(DIR)

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

który wygeneruje w Plik Makefile.SH:

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

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

Deklaracja „A” została otoczona pominąć, aby nie pojawiało się w
wygenerowany plik Makefile.SH, ale zostanie on wzięty pod uwagę przez zrób dla
podstawienie we wzorze.

Liczba rozwinięć jest ustalana na podstawie liczby możliwych wartości dla
drugim parametr. Jeśli inne parametry mają mniej wartości podstawienia, otrzymają
puste.

Można dodać wyrażenie regularne na końcu '-expand'. To wyrażenie regularne
wyrażenie zostanie usunięte z ostatniego zestawu rozwinięć na końcu każdego wiersza.
Można również dokonać podstawień w rozwiniętym elemencie, korzystając ze składni
(jeśli 'f' jest zmienną rozszerzoną) !f:= gdzie oraz są dwa regularne
wyrażenia (bez spacji). Wzór zostanie zastąpiony wzorem
(zastąpione zostanie tylko pierwsze wystąpienie).

Na koniec w rozszerzonej sekcji możesz odwołać się do zmiennych, których wartość jest obliczana
poprzez kolejne rozszerzenie, które ułatwia definiowanie generyków Pliki Jmake.

Przykład:

SRC = foo.c bar.c
OBJ =
|rozwiń f!$(SRC)!
!f:\.c=\.o
-expand \
INC =
|rozwiń f!$(OBJ)!
!f:\.o=\.h
-expand \

który wygeneruje w Plik Makefile.SH:

SRC = foo.c bar.c
OBJ =
fuo.o
bar.o
INC =
foo.h
pasek.h

Nie zapomnij o ochronie znaków specjalnych w wyrażeniach regularnych, takich jak
ukośnik, kropka, itp.

pewnego razu polecenie jest oznaczone nazwą. Za pierwszym razem, gdy nazwa się pojawi, raz
konstrukcja jest ignorowana, a tekst do „-once” zostanie skopiowany do wygenerowanego
Makefile.SH. Jednak przyszłe wystąpienia tej samej nazwy zostaną zignorowane (pewnego razu
będzie zachowywać się jak pominąć).

Przykład:

|kiedy to_jest_nazwa

-pewnego razu

powłoka Polecenie może zostać użyte do wygenerowania fragmentu powłoki w pliku Makefile.SH.
na przykład następująca sekcja w pliku Jmakefile:

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

spowoduje wygenerowanie zawartego w pliku Makefile.SH fragmentu do obliczenia
wartości bez zająknienia oraz gtk zmienne oparte na zmiennej konfiguracyjnej
d_usegtk1 ustawić poprzez uruchomienie Konfiguratora.

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

|przypadek glib w 1
pokaz:
echo „Budowanie dla glib-1.x”
-walizka

Ta sekcja wygeneruje coś takiego w pliku Makefile.SH:

!NIE!SUBS!
przypadek „$glib” w
1)
$spitshell >>Makefile <<'!NIE!ZAPISY!'
pokaz:
echo „Budowanie dla glib-1.x”
!NIE!SUBS!
;;
to C
$spitshell >>Makefile <<'!NIE!ZAPISY!'

A podczas uruchamiania Makefile.SH powyższa reguła „display” pojawi się tylko wtedy, gdy
budynek dla glib-1.x. Forma ostateczna Makefile może zatem zależeć od
opcje konfiguracji wybrane podczas Konfigurowanie został uruchomiony.

5) Inicjalizacje:

· + :Umieszcza cały wiersz 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 wykorzystania w języku C
kompilacja, faza łączenia lub cel zależny. Można zatem dodać trochę dodatkowych
flagi takie jak -I lub biblioteki dla plików Makefile w określonych podkatalogach.

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



Najnowsze programy online dla systemów Linux i Windows