URL: https://www.overclockers.at/coding-stuff/gnu_make_make_erfindet_rm_212193/page_1 - zur Vollversion wechseln!
Mein makefile denkt sich irgendwo einen "rm ..." Befehl aus, was es aber nicht machen soll wenns nach mir geht. Ich nehm mal stark an dass ich irgendwo was verbaut hab *hust*
Das makefile selbst soll pdflatex ausführen und das Ergebnis in ein anderes Verzeichnis KOPIEREN (mit spezieller benamsung)
Was aber im Moment passiert ist dass es nach dem kopieren das "original" PDF löscht, wodurch mir make natürlich unabhängig von änderungen im tex-file ständig pdflatex ausführt.... abgesehen davon hat auch TeXShop Probleme damit ein PDF anzuzeigen das nicht existiert (TeXShop erzeugt $(PRJ).pdf und zeigt das per intrnem Viewer an)
Das merkwürdige ist, dass mir in der Konsole sogar der rm-Befehl angezeigt wird, direkt nach cp 
Ich starte make übrigens *nicht* aus TeXShop sondern vom Terminal aus, nur um dahingehenden Fragen vorzubeugen 
Hier das Makefile:
Code:PRJ = Test TEXBIN="/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/i386/" AWKDATE=gawk '{gsub("%% DATE=","");print $0}' AWKSHRT=gawk '{gsub("%% SHORT=","");print $0}' GREPDATE=grep -E "^%% DATE=" "$@.tex" GREPSHRT=grep -E "^%% SHORT=" "$@.tex" GETDATE=$(GREPDATE) | $(AWKDATE) GETSHRT=$(GREPSHRT) | $(AWKSHRT) # Phony targets will always be run .PHONY: clean cleaner all: $(PRJ) %: %.pdf cp -f "$<" "../_PDF/Test_`$(GETSHRT)`_`$(GETDATE)`.pdf" %.pdf: %.tex $(TEXBIN)pdflatex "$<" > /dev/null $(TEXBIN)pdflatex "$<" > /dev/null clean: rm -f *.out rm -f *.aux cleaner: clean rm -f *.log rm -f *.pdf
Code:"/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/i386/"pdflatex "Test.tex" > /dev/null "/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/i386/"pdflatex "Test.tex" > /dev/null cp -f "Test.pdf" "../_PDF/Test_`grep -E "^%% SHORT=" "Test.tex" | gawk '{gsub("%% SHORT=","");print }'`_`grep -E "^%% DATE=" "Test.tex" | gawk '{gsub("%% DATE=","");print }'`.pdf" rm Test.pdf
Am wahrscheinlichsten liegt es daran, dass du das File "Test" nicht erzeugst. Wenn du's als Target hast, sollte auch das File gemacht werden. Oder pdflatex liefert einen Fehlercode zurück. Da könnte ich mir auch vorstellen, dass er deswegen das output-File löscht.
pdflatex macht keinen Fehler, das dachte ich mir auch schon, das mit dem File erzeugen... Werd ich mal testen, find ich trotzdem noch merkwürdig dass der einfach den Output löscht
Ok ich hab das jetzt verändert.... und er löscht mir NOCH IMMER ein file nur in dem Fall ists nicht so schlimm, das is wohl noch das unwichtigste:
Code:PRJ = Test TEXBIN="/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/i386/" AWKDATE=gawk '{gsub("%% DATE=","");print $0}' AWKSHRT=gawk '{gsub("%% SHORT=","");print $0}' GREPDATE=grep -E "^%% DATE=" "$<" GREPSHRT=grep -E "^%% SHORT=" "$<" GETDATE=`$(GREPDATE) | $(AWKDATE)` GETSHRT=`$(GREPSHRT) | $(AWKSHRT)` SILENT= > /dev/null # Phony targets will always be run .PHONY: clean cleaner all: $(PRJ).pdf %.pdf: %.tex %.cp $(TEXBIN)pdflatex "$<" $(SILENT) $(TEXBIN)pdflatex "$<" $(SILENT) cp -f "$@" "`cat $*.cp`" %.cp: %.tex echo ../_PDF/$(GETSHRT)_$(GETDATE).pdf > $@ clean: rm -f *.log rm -f *.out rm -f *.aux rm -f *.cp cleaner: clean rm -f *.pdf
Code:echo ../_PDF/`grep -E "^%% SHORT=" "Test.tex" | gawk '{gsub("%% SHORT=","");print }'`_`grep -E "^%% DATE=" "Test.tex" | gawk '{gsub("%% DATE=","");print }'`.pdf > Test.cp "/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/i386/"pdflatex "Test.tex" > /dev/null "/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/i386/"pdflatex "Test.tex" > /dev/null cp -f "Test.pdf" "`cat Test.cp`" rm Test.cp
Hast du irgendwelche komischen Environmentvariablen gesetzt? Mir kommt das Verhalten schon etwas seltsam vor…
Überhaupt nichts, aber... du musst mir ja nicht glauben, env sollte mich entlasten 
(sorry für -snip- aber forum is public lesbar und ich kenn nicht alle sicherheitslückenCode:foobar:~$ env MANPATH=/sw/share/man:/opt/subversion/man:/usr/share/man:/usr/local/share/man:/usr/X11/man:/sw/lib/perl5/5.10.0/man:/usr/X11R6/man TERM_PROGRAM=Apple_Terminal TERM=xterm-color SHELL=/bin/bash TMPDIR=-snip- PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin Apple_PubSub_Socket_Render=-snip- TERM_PROGRAM_VERSION=272 QTDIR=/sw/lib/qt3 SGML_CATALOG_FILES=/sw/etc/sgml/catalog USER=foobar COMMAND_MODE=unix2003 SSH_AUTH_SOCK=-snip- __CF_USER_TEXT_ENCODING=0x1F5:0:0 PATH=/sw/bin:/sw/sbin:/opt/subversion/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/foobar/Scripts:/usr/X11R6/bin XML_CATALOG_FILES=/sw/etc/xml/catalog PWD=/Users/foobar VERSIONER_PERL_PREFER_32_BIT=yes SHLVL=1 HOME=/Users/foobar LOGNAME=foobar LC_CTYPE=UTF-8 INFOPATH=/sw/share/info:/sw/info:/usr/share/info DISPLAY=-snip-:0 _=/usr/bin/env
)Ändere mal den Namen von Test.cp auf was anderes ... meintest.cp oder so.
Hmm, macht's vielleicht Probleme, dass es groß geschrieben ist?
Das Verhalten von make wird wohl nie jemand vollständig verstehen
.
Zitat von RingdingDas Verhalten von make wird wohl nie jemand vollständig verstehen.

Aaalso, ich hab auf der Uni mit wem diskutiert warum das gelöscht wird und der hat mir nen Tip gegeben... ziemlich einfach eigentlich.
Für make gibts die option "-d" mit der es anzeigt wie das makefile interpretiert wird, welche rules angewendet werden. Vor dem rm kommt die message "Removing intermediate files..." und es gibt scheinbar auch eine passende
Code:Trying implicit prerequisite `Test.cp'. Looking for a rule with intermediate file `Test.cp'. Avoiding implicit rule recursion. Trying pattern rule with stem `Test'. Trying implicit prerequisite `Test.tex'. Found an implicit rule for `Test.pdf'.
Ha!
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=4073
Ziemlich weit unten meldet sich der package-maintainer mit:
Naja, zu früh gefreut, weil das funktioniert eben wieder nicht mit pattern rules...ZitatAll you have to do to remove intermediate file processing is cause the
file to not be considered intermediate anymore. All it takes for a file
to not be intermediate is _any_ explicit mention whatsoever of the file,
either as a dependency or as a prerequisite.
So, just saying:
dummy: t.bar
is enough to keep t.bar from being intermediate, without any of the
side-effects of .PRECIOUS.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026