Thread View: pl.comp.os.linux.programowanie
6 messages
6 total messages
Started by Kacper Perschke
Sat, 05 Feb 2011 01:50
makefile - optymalizacja
Author: Kacper Perschke
Date: Sat, 05 Feb 2011 01:50
Date: Sat, 05 Feb 2011 01:50
131 lines
4380 bytes
4380 bytes
Witam szanownych grupowidczów.
Prosze abyście wskazali mi gdzie poczytam jak zoptymalizować/zmniejszyć mój
makefile, który już zaczyna niebezpiecznie puchnąć. Każdy target kosztuje plus
minus pięć liniii w aktualnym makefile. O istneiniu implicit rules wiem i jakoś
nie umiem ich zastosować.
-- puchnący makefile --------------------------------------------------
# Katalogi
TARGET_DIR = ../target/
TARGET_DIR_2009 = $(TARGET_DIR)2009/
SOURCE_DIR_2009 = ./2009/
# Komendy
FORMAT_XHTML = tidy \
--clean y \
--output-xhtml y \
--uppercase-attributes y \
--uppercase-tags y \
--indent "auto" \
--indent-spaces "4" \
--wrap "320" \
--wrap-attributes y \
--char-encoding "utf8" \
--tidy-mark n
# Zestawy
TARGET_MAIN_INDEX = $(TARGET_DIR)index.html
TARGET_MAIN_SEARCH = $(TARGET_DIR)search.html
TARGET_MAIN_NOWHERE = $(TARGET_DIR)nowhere.html
TARGET_MAIN_ICO = $(TARGET_DIR)favicon.ico
TARGET_MAIN_CSS = $(TARGET_DIR)wyglad.css
TARGET_MAIN_LOGO = $(TARGET_DIR)logo.png
TARGET_MAIN_JS_GA = $(TARGET_DIR)ga.js
TARGET_MAIN_JS_JQ = $(TARGET_DIR)jquery.js
TARGET_MAIN_JS_FL = $(TARGET_DIR)folding.js
TARGETS_MAIN = \
$(TARGET_MAIN_INDEX) \
$(TARGET_MAIN_SEARCH) \
$(TARGET_MAIN_NOWHERE) \
$(TARGET_MAIN_ICO) \
$(TARGET_MAIN_CSS) \
$(TARGET_MAIN_LOGO) \
$(TARGET_MAIN_JS_GA) \
$(TARGET_MAIN_JS_JQ) \
$(TARGET_MAIN_JS_FL)
TARGET_2009_TITLE = $(TARGET_DIR_2009)title.html
TARGET_2009_COMMENT = $(TARGET_DIR_2009)comment.html
TARGET_2009_COMMENT_PNG_1 = $(TARGET_DIR_2009)2009_comment_1.png
TARGET_2009_COMMENT_PNG_2 = $(TARGET_DIR_2009)2009_comment_2.png
TARGET_2009_COMMENT_PNG_3 = $(TARGET_DIR_2009)2009_comment_3.png
TARGET_2009_COMMENT_PNG_4 = $(TARGET_DIR_2009)2009_comment_4.png
TARGETS_2009 = \
$(TARGET_2009_TITLE) \
$(TARGET_2009_COMMENT) \
$(TARGET_2009_COMMENT_PNG_1) \
$(TARGET_2009_COMMENT_PNG_2) \
$(TARGET_2009_COMMENT_PNG_3) \
$(TARGET_2009_COMMENT_PNG_4)
TARGETS_ALL = \
$(TARGETS_MAIN) \
$(TARGETS_2009)
HTML_ADD_M4 = \
definitions.m4 \
top.m4 \
bottom.m4
# Recepty
# %.html : %.m4 ; -m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_MAIN_INDEX) : index.m4 $(HTML_ADD_M4)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_MAIN_SEARCH) : search.m4 $(HTML_ADD_M4)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_MAIN_NOWHERE) : nowhere.m4 $(HTML_ADD_M4)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_MAIN_ICO) : favicon.ico
cp $< $@
$(TARGET_MAIN_LOGO) : logo.png
cp $< $@
$(TARGET_MAIN_CSS) : wyglad.css
cp $< $@
$(TARGET_MAIN_JS_GA) : ga.js
cp $< $@
$(TARGET_MAIN_JS_JQ) : jquery.js
cp $< $@
$(TARGET_MAIN_JS_FL) : folding.js
cp $< $@
$(TARGET_2009_TITLE) : $(SOURCE_DIR_2009)title.m4 $(HTML_ADD_M4)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_2009_COMMENT) : $(SOURCE_DIR_2009)comment.m4 $(HTML_ADD_M4)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_2009_COMMENT_PNG_1) : $(SOURCE_DIR_2009)2009_comment_1.png
cp $< $@
$(TARGET_2009_COMMENT_PNG_2) : $(SOURCE_DIR_2009)2009_comment_2.png
cp $< $@
$(TARGET_2009_COMMENT_PNG_3) : $(SOURCE_DIR_2009)2009_comment_3.png
cp $< $@
$(TARGET_2009_COMMENT_PNG_4) : $(SOURCE_DIR_2009)2009_comment_4.png
cp $< $@
# Jedziemy
all : $(TARGETS_ALL)
clean :
rm $(TARGETS_ALL)
-- puchnący makefile - koniec -----------------------------------------
KAcper
--
Mail => www.rot13.com
Re: makefile - optymalizacja
Author: Stachu 'Dozzie' K.
Date: Sat, 05 Feb 2011 14:18
Date: Sat, 05 Feb 2011 14:18
56 lines
2945 bytes
2945 bytes
On 2011-02-05, Kacper Perschke <zbp.yvnzt@rxupferc.ercpnx> wrote:
> Witam szanownych grupowidczów.
>
> Prosze abyście wskazali mi gdzie poczytam jak zoptymalizować/zmniejszyć mój
> makefile, który już zaczyna niebezpiecznie puchnąć. Każdy target kosztuje plus
> minus pięć liniii w aktualnym makefile. O istneiniu implicit rules wiem i jakoś
> nie umiem ich zastosować.
>
> -- puchnący makefile --------------------------------------------------
> # Katalogi
> TARGET_DIR = ../target/
> TARGET_DIR_2009 = $(TARGET_DIR)2009/
Ja bym raczej zakładał że TARGET_DIR_2009 = $(TARGET_DIR)/2009,
a ewentualnie dokładał "TARGET_DIR = .". Trochę mi się to lepiej czyta,
zwłaszcza że nie zakładam że poprzedni kończy się slashem (nie trzeba
pamiętać o dodaniu go przy nadpisywaniu zmiennej z wiersza poleceń).
> TARGET_MAIN_NOWHERE = $(TARGET_DIR)nowhere.html
> TARGET_MAIN_ICO = $(TARGET_DIR)favicon.ico
> TARGET_MAIN_LOGO = $(TARGET_DIR)logo.png
[...]
> $(TARGET_MAIN_NOWHERE) : nowhere.m4 $(HTML_ADD_M4)
> -m4 $< | $(FORMAT_XHTML) > $@
>
> $(TARGET_MAIN_ICO) : favicon.ico
> cp $< $@
>
> $(TARGET_MAIN_LOGO) : logo.png
> cp $< $@
Z tych zmiennych właściwie nie korzystasz. Ja bym to zrobił tak (uwaga
na kolejność reguł):
$(TARGET_DIR)/%.html: %.html
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_DIR)/%: %
cp $< $@
> TARGETS_MAIN = \
> $(TARGET_MAIN_INDEX) \
> $(TARGET_MAIN_SEARCH) \
[...]
To się da załatwić tak:
TARGET_FILES = index.html search.html nowhere.html favicon.ico \
wyglad.css logo.png ga.js jquery.js folding.js
TARGETS_MAIN = $(foreach F,$(TARGET_DIR)/$F,$(TARGET_FILES))
Trochę krótsze.
--
Secunia non olet.
Stanislaw Klekot
Re: makefile - optymalizacja
Author: Kacper Perschke
Date: Mon, 07 Feb 2011 10:28
Date: Mon, 07 Feb 2011 10:28
146 lines
5507 bytes
5507 bytes
Stachu!
Dzięki za krótkie wprowadzenie do myślenia po makeowemu.
Tego mi właśnie brakowało mimo rozpaczliwego skakania po dokumentacji.
Dnia 05.02.2011 Stachu 'Dozzie' K. <dozzie@go.eat.some.screws.spammer.invalid> napisał:
> On 2011-02-05, Kacper Perschke <zbp.yvnzt@rxupferc.ercpnx> wrote:
>> [...]
>> gdzie poczytam jak zoptymalizować/zmniejszyć mój makefile, który już
>> zaczyna niebezpiecznie puchnąć. Każdy target kosztuje plus minus pięć
>> linii
>> [...]
> Ja bym raczej zakładał że [...]
> [...]
> Ja bym to zrobił tak (uwaga na kolejność reguł):
> [...]
> To się da załatwić tak:
> [...]
> Trochę krótsze.
Super! Po zastosowaniu rad Stacha mam makefile, który potrzebuje
dołączenia kolejnego celu tylko w jednym miejscu, a nie jak wcześniej w
trzech miejscach.
Nie udało mi się zastosować foreach. Widzę, że muszę teraz pomacać
funkcje make to może uda mi się wyprodukować makefile, który będzie sam
sobie produkował listę celów na podstawie zawartości źródeł.
------------------------------------------------------------------------
Skrypt uruchomiony pon, 7 lut 2011, 11:06:06
kacper@zbiig:~/Jacek/xhtml$ ls -l
razem 12
-rw-r--r-- 1 kacper kacper 2789 02-07 10:53 makefile
drwxr-xr-x 3 kacper kacper 4096 02-07 10:29 source
drwxr-xr-x 3 kacper kacper 4096 02-07 10:46 target
-rw-r--r-- 1 kacper kacper 0 02-07 11:06 typescript
kacper@zbiig:~/Jacek/xhtml$ cat makefile
# Katalogi
SOURCE_DIR = ./source
SOURCE_DIR_2009 = $(SOURCE_DIR)/2009
TARGET_DIR = ./target
TARGET_DIR_2009 = $(TARGET_DIR)/2009
# Komendy
FORMAT_XHTML = tidy \
--clean y \
--output-xhtml y \
--uppercase-attributes y \
--uppercase-tags y \
--indent "auto" \
--indent-spaces "4" \
--wrap "320" \
--wrap-attributes y \
--char-encoding "utf8" \
--tidy-mark n
# Zestawy
TARGETS_MAIN = \
$(TARGET_DIR)/index.html \
$(TARGET_DIR)/search.html \
$(TARGET_DIR)/nowhere.html \
$(TARGET_DIR)/favicon.ico \
$(TARGET_DIR)/wyglad.css \
$(TARGET_DIR)/logo.png \
$(TARGET_DIR)/ga.js \
$(TARGET_DIR)/jquery.js \
$(TARGET_DIR)/folding.js \
TARGETS_2009 = \
$(TARGET_DIR_2009)/title.html \
$(TARGET_DIR_2009)/comment.html \
$(TARGET_DIR_2009)/2009_comment_1.png \
$(TARGET_DIR_2009)/2009_comment_2.png \
$(TARGET_DIR_2009)/2009_comment_3.png \
$(TARGET_DIR_2009)/2009_comment_4.png \
$(TARGET_DIR_2009)/lidp_ww.html \
$(TARGET_DIR_2009)/fpigzfp_ww.html \
$(TARGET_DIR_2009)/pdp_ww.html \
$(TARGET_DIR_2009)/lgiprp_ww.html \
$(TARGET_DIR_2009)/lgiprpzzpooc_ww.html \
$(TARGET_DIR_2009)/lozzp_pmw.html \
$(TARGET_DIR_2009)/lidp_ww_a.html \
$(TARGET_DIR_2009)/fpgzfp_ww.html \
$(TARGET_DIR_2009)/pdp_ww_a.html \
$(TARGET_DIR_2009)/loiprp_wr.html \
$(TARGET_DIR_2009)/loiprzzpooc_ww.html \
$(TARGET_DIR_2009)/lozzp_pmw_a.html \
$(TARGET_DIR_2009)/lidp_ww_b.html \
$(TARGET_DIR_2009)/fpgzfp_ww_a.html \
$(TARGET_DIR_2009)/pdp_ww_b.html \
$(TARGET_DIR_2009)/loiprp_wr_a.html \
$(TARGET_DIR_2009)/loiprpzzpsuaoocw_ww.html \
$(TARGET_DIR_2009)/lozzp_pmw_b.html \
$(TARGET_DIR_2009)/lidp_ww_c.html \
$(TARGET_DIR_2009)/fpigsfp_ww.html \
$(TARGET_DIR_2009)/pdp_ww_c.html \
$(TARGET_DIR_2009)/loiprp_wr_b.html \
$(TARGET_DIR_2009)/lozzp_pmw_c.html \
$(TARGET_DIR_2009)/lidp_ww_d.html \
$(TARGET_DIR_2009)/pdp_ww_d.html \
$(TARGET_DIR_2009)/loiprpzzp_ww.html \
$(TARGET_DIR_2009)/lozzp_wpmw.html \
$(TARGET_DIR_2009)/lprp_ww.html \
TARGETS_ALL = \
$(TARGETS_MAIN) \
$(TARGETS_2009)
HTML_ADD_M4 = \
$(SOURCE_DIR)/definitions.m4 \
$(SOURCE_DIR)/top.m4 \
$(SOURCE_DIR)/bottom.m4
HTML_ADD_2009 = $(SOURCE_DIR_2009)/spis.m4
# Recepty
$(TARGET_DIR)/%.html : $(SOURCE_DIR)/%.m4 $(HTML_ADD_M4)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_DIR)/% : $(SOURCE_DIR)/%
cp $< $@
$(TARGET_DIR_2009)/%.html : $(SOURCE_DIR_2009)/%.m4 $(HTML_ADD_M4) $(HTML_ADD_2009)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_DIR_2009)/% : $(SOURCE_DIR_2009)/%
cp $< $@
# Jedziemy
all: \
$(TARGETS_ALL)
.PHONY : clean
clean:
rm $(TARGETS_ALL)
kacper@zbiig:~/Jacek/xhtml$ exit
Skrypt wykonany pon, 7 lut 2011, 11:06:15
------------------------------------------------------------------------
Gdybym nie dał znaku postępu do następnego poniedziałku (2011-02-14)
proszę mi przypomnieć.
KAcper
--
Mail => www.rot13.com
Re: makefile - optymalizacja
Author: Kacper Perschke
Date: Mon, 07 Feb 2011 10:31
Date: Mon, 07 Feb 2011 10:31
14 lines
1136 bytes
1136 bytes
Dnia 05.02.2011 Stachu 'Dozzie' K. napisał: > [...] Stachu! Czy maszyna z której wysyłasz Content-Type: text/plain; charset=iso-8859-2 User-Agent: slrn/pre0.9.9-111 (Linux) ma utf8, czy iso-8859-2 ? Pozdrawiam. KAcper -- Mail => www.rot13.com
Re: makefile - optymalizacja
Author: Stachu 'Dozzie' K.
Date: Mon, 07 Feb 2011 11:45
Date: Mon, 07 Feb 2011 11:45
24 lines
1923 bytes
1923 bytes
On 2011-02-07, Kacper Perschke <zbp.yvnzt@rxupferc.ercpnx> wrote: > Dnia 05.02.2011 Stachu 'Dozzie' K. napisał: >> [...] > > Stachu! > > Czy maszyna z której wysyłasz > Content-Type: text/plain; charset=iso-8859-2 > User-Agent: slrn/pre0.9.9-111 (Linux) > ma utf8, czy iso-8859-2 ? UTF-8. latin2 jest wybierany tam gdzie się da (gdzie nie ma znaków spoza tego kodowania), a w pozostałych przypadkach UTF-8. http://slrn.sourceforge.net/docs/slrn-manual-5.html #v+ [dozzie@jarowit dozzie]$ grep iso ~/.slrnrc | grep -v '^%' charset outgoing "iso-8859-2,utf-8" [dozzie@jarowit dozzie]$ #v- -- Secunia non olet. Stanislaw Klekot
Re: makefile - optymalizacja
Author: Kacper Perschke
Date: Mon, 07 Feb 2011 19:42
Date: Mon, 07 Feb 2011 19:42
107 lines
4061 bytes
4061 bytes
Dnia 07.02.2011 Kacper Perschke <zbp.yvnzt@rxupferc.ercpnx> napisał:
> [...]
> Nie udało mi się zastosować foreach.
> [...]
> makefile, który będzie sam sobie produkował listę celów na podstawie
> zawartości źródeł.
Udało się jedno i drugie.
Przy założeniu, że
- makefile leży powyżej katalogów source i target
- source i target mają podkatalog 2009
- poza pewnymi includami każdy m4 transformuje się 1:1 na html
wyprodukowałem makefile, który dla nowych pliczków m4 nie wymaga
dopisywania celów.
------------------------------------------------------------------------
# Katalogi
SOURCE_DIR = ./source
SOURCE_DIR_2009 = $(SOURCE_DIR)/2009
TARGET_DIR = ./target
TARGET_DIR_2009 = $(TARGET_DIR)/2009
# Komendy
FORMAT_XHTML = tidy \
--clean y \
--output-xhtml y \
--uppercase-attributes y \
--uppercase-tags y \
--indent "auto" \
--indent-spaces "4" \
--wrap "320" \
--wrap-attributes y \
--char-encoding "utf8" \
--tidy-mark n
# Cele
TARGETS_NON_HTML_MAIN_FILES = \
favicon.ico \
ipin_zooz_rocznik_statystyczny.css \
symbol_ipin.png \
ga.js \
jquery.js \
folding.js
TARGETS_NON_HTML_2009_FILES = \
2009_comment_1.png \
2009_comment_2.png \
2009_comment_3.png \
2009_comment_4.png
TARGETS_NON_HTML = \
$(foreach FILE, $(TARGETS_NON_HTML_MAIN_FILES), $(TARGET_DIR)/$(FILE)) \
$(foreach FILE, $(TARGETS_NON_HTML_2009_FILES), $(TARGET_DIR_2009)/$(FILE))
HTML_ADD = $(HTML_ADD_M4) $(HTML_ADD_2009)
# Definicje HTML_ADD_M4 i HTML_ADD_2009 są poniżej.
M4_ALL = $(shell find ./source/ -type f -name '*.m4')
M4_SOURCES = $(filter-out $(HTML_ADD), $(M4_ALL))
M4_FOR_TARGETS = $(subst source,target,$(M4_SOURCES))
TARGETS_HTML = $(subst .m4,.html,$(M4_FOR_TARGETS))
TARGETS_ALL = \
$(TARGETS_NON_HTML) \
$(TARGETS_HTML)
# Zależności
HTML_ADD_M4 = \
$(SOURCE_DIR)/definitions.m4 \
$(SOURCE_DIR)/top.m4 \
$(SOURCE_DIR)/bottom.m4
HTML_ADD_2009 = $(SOURCE_DIR_2009)/spis.m4
# Recepty
$(TARGET_DIR)/%.html : $(SOURCE_DIR)/%.m4 $(HTML_ADD_M4)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_DIR)/% : $(SOURCE_DIR)/%
cp $< $@
$(TARGET_DIR_2009)/%.html : $(SOURCE_DIR_2009)/%.m4 $(HTML_ADD_M4) $(HTML_ADD_2009)
-m4 $< | $(FORMAT_XHTML) > $@
$(TARGET_DIR_2009)/% : $(SOURCE_DIR_2009)/%
cp $< $@
# Jedziemy
all : \
$(TARGETS_ALL)
.PHONY : clean
clean :
rm $(TARGETS_ALL)
------------------------------------------------------------------------
Cała maszyneria jest w produkcji TARGETS_HTML.
> Gdybym nie dał znaku postępu do następnego poniedziałku (2011-02-14)
> proszę mi przypomnieć.
Jestem w miarę usatysfakcjonowany i już raczej istotnego postępu nie
przewiduję. Wszelkie uwagi przyjmę z wdzięcznością. Jesli ktoś by chciał abym
popełnił jakiś artykulik prelekcję jak generowałem sajcik przy pomocy m4 i make
to prosze o wiadomość.
KAcper
--
Mail => www.rot13.com
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads