Archiv verlassen und diese Seite im Standarddesign anzeigen : Automake, Target mit mehreren Abhaengigkeiten
bienchen
05-11-2011, 12:50
Moin, moin,
ich versuche gerade in einem Makefile.am (Automarke) was zu schreiben um mit R Plots in PDF zu übersetzen. Das Problem ist, dass ich auf biegen und brechen die Abhängigkeit zu den Daten nicht reinbekomme.
Bisher habe ich folgendes:
SUFFIXES = .R .pdf
.R:
Mache R Script ausfuehrbar
.R.pdf:
Fuehre R Script aus ;-)
Was muss ich machen, damit das PDF auch vom Datenfile abhängt?
Sowas wie
.R.pdf: DATENFILE
Fuehre R Script aus
Klappt nicht. Oder sowas wie
.data.pdf:
...
bringe ich auch nicht ans laufen.
Hat irgendwer ne Idee?
mfg,
bienchen
undefined
05-11-2011, 17:12
Das ist eher eine Bash als Automake frage.
Das Zauberwort ist Variablen expandierung.
SCRIPT = echo
all: info pdf
info: *.R
@echo "ARRAY Inhalt:" $?
@echo "Zeiger auf Rule:" $@
pdf: *.R
@echo "Start:"
@for i in $? ; do \
$(SCRIPT) $$i $${i/.R/}.$@ ; \
done
Der Grund warum deine .SUFFIX Versuche nicht hinhauen liegt daran.
Das diese Arbeitsweise ein interne Compiler Erweiterung erwartet z.B. C/C++ auf ein TARGET oder Programm.
Siehe auch die Infopages "info make/Automatic Variables"
bienchen
05-11-2011, 18:28
Hallo zurueck,
Das mit der Variablenexpansion ist mir schon bewusst. Das mit dem Suffix klappt zumindest fuer .R und .pdf. Und *.R als Dependance anzugeben, geht doch auch alle Files mit Endung R im Verzeichnes, nicht blos auf ein bestimmtes, oder? Ich möchte ja nicht jedes mal alle Plots neu erstellen, sondern lediglich jene, fuer welche sich auch etwas geändert hat.
mfg,
bienchen
undefined
06-11-2011, 06:59
Du hast nicht verstanden was ich Dir in meinem Beitrag der letzten Zeile mitgeteilt habe.
Nochmal:
Es ist Notwendig das du Automake mitteilst:
Das es sich um ein Ziel Target handelt (z.B. Programm Bibliothek Script Datenziel etc.). Ansonsten Ignoriert Automake deine Eingabe.
1. Variante mit Datenangabe
## Makefile.am
AM_DEFAULT_SOURCE_EXT = .R
pdfdir = @datadir@/projekt
pdf_DATA = 1.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf
%.pdf: %.R
@echo "Generate " $@
@echo $< > $@
2. Beispiel mit FAKE Targets und eigener Installations Routine in einer Multi Umgebung (weitere andere Targets)
## Makefile.am
AM_DEFAULT_SOURCE_EXT = .R
noinst_SCRIPTS = 1.pdf 2.pdf 3.pdf 4.pdf 5.pdf 6.pdf 7.pdf 8.pdf 9.pdf
%.pdf: %.R
@echo "Generate " $@
@echo $< > $@
install:
@mkdir -p $(DESTDIR)/$(datadir)/projekt
@install -m 0644 $(noinst_SCRIPTS) $(DESTDIR)/$(datadir)/projekt
uninstall:
@for i in $(noinst_SCRIPTS) ; do \
rm -fv $(DESTDIR)/$(datadir)/projekt/$$i; done
Was deine Frage zu Änderungen erkennen betrifft siehe AM_SANITY_CHECK
bienchen
06-11-2011, 10:55
Aber bei
%.pdf: %.R
Regeln habe ich das Problem, dass das GNU-Extensions sind, bei welchen Automarke aussteigt.
Weil dann könnte ich ja
%.pdf: %.R %.data
sagen, oder?
undefined
06-11-2011, 11:23
Also Irgendwie kommt bei dir immer wieder was neues dazu ;)
Guckst Du hier (http://www.gnu.org/software/automake/manual/autoconf.html#Portable-Make) und hier (http://www.gnu.org/software/automake/manual/autoconf.html#Single-Suffix-Rules)
bienchen
06-11-2011, 12:59
Also eigentlich steht das alles schon im ersten Post... aber zugegeben, da ich die Terminologie nicht drauf habe, ist es schwierig fuer mich mein Problem anständig zu kommunizieren.
Haette ich hingegen die nötigen Begriffe schon vorher gekannt, hätte ich vmtl. gar kein Problem gehabt, da ich dann selber in der Doku hätte suchen können ;-)
Vielen Dank fuer die Links an die richtigen Stellen der Doku, danach habe ich gestern den halben Tag gesucht. Wenn ich Zeit habe das fertig zu machen, poste ich die Lösung hier.
mfg,
bienchen
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.