In meinem Quellcodeverzeichnis gibt es Dateien mit den Namen man_en , man_de .
Jetzt möchte ich für jeden von ihnen Ziele haben, wie:
/usr/share/man/man1/$(PROGRAM).1.gz und
/usr/share/man/de/man1/$(PROGRAM).1.gz , für Regeln wie:
/usr/share/man/man1/$(PROGRAM).1.gz: man_en
gzip -c man_en > /usr/share/man/man1/$(PROGRAM).1.gz
/usr/share/man/de/man1/$(PROGRAM).1.gz: man_de
gzip -c man_de > /usr/share/man/de/man1/$(PROGRAM).1.gz
Wenn jemand eine Datei man_fr zum Quellcodeverzeichnis hinzufügt , sollte das Ziel
/usr/share/man/fr/man1/$(PROGRAM).1.gz
automatisch generiert oder bereitgestellt werden.
Kann ich dies ohne ein Programm erreichen, das mein Makefile modifiziert?
Im Wesentlichen ist dies nur eine Anwendung für eine implizite Musterregel , aber es wird etwas kompliziert durch die Tatsache, dass dies man_en
eine Ausnahme von der allgemeinen Musterregel ist, die den Zielnamen liefert. Hier ist eine Beispiellösung:
Makefile
PROGRAM ?= prog
FOREIGN_MAN_SRCS := $(subst man_en,,$(wildcard man_*))
FOREIGN_MAN_TARGS := $(patsubst man_%,/usr/share/man/%/man1/$(PROGRAM).1.gz,$(FOREIGN_MAN_SRCS))
EN_MAN_TARG := /usr/share/man/man1/$(PROGRAM).1.gz
.PHONY: all
all: $(FOREIGN_MAN_TARGS) $(EN_MAN_TARG)
/usr/share/man/man1/$(PROGRAM).1.gz: man_en
gzip -c man_en > /usr/share/man/man1/$(PROGRAM).1.gz
/usr/share/man/%/man1/$(PROGRAM).1.gz: man_%
gzip -c man_$* > /usr/share/man/$*/man1/$(PROGRAM).1.gz
was läuft wie:
$ make --dry-run
gzip -c man_de > /usr/share/man/de/man1/prog.1.gz
gzip -c man_fr > /usr/share/man/fr/man1/prog.1.gz
gzip -c man_en > /usr/share/man/man1/prog.1.gz
Ich empfehle das GNU Make-Handbuch
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen