makefile - gnu make recreating directory structure in target -


i'd use gnumake image compression , preparations websites.

i have structure like

src     www.site1.org         images             foo.jpg             bar.png         css             style.scss     www.site2.org         images             baz.svg         css             design.scss 

i want able recreate structure in target directory while using other tools optimize/compile sources e.g. convert --strip src/www.site1.org/images/foo.jpg target/www.site1.org/images/foo.jpg

i can find jpegs using src:=$(shell find . -name '*.jpg') , create variable holding targets targets=$(src:src=target).

but don't find way of writing rule (naively) like:

$(target): $(src)     convert --strip $< $@ 

i've searched internet quiet time didn't find appropriate.

you use:

src     := $(shell find src -name '*.jpg') targets = $(patsubst src/%,target/%,$(src))  all: $(targets)  $(targets): target/%: src/%     convert --strip $< $@ 

which says: each word in targets, match against target/% pattern (and record % sub-expression), consider single dependency src/% , apply recipe. gnu make feature, documented in section 4.12 static pattern rules of manual.

by way, $(src:src=target) not think because pattern matches @ end of each word of $(src). so, foo_src substituted foo_target src/foo left unmodified. patsubst more powerful substitution function.


Comments

Popular posts from this blog

java - UnknownEntityTypeException: Unable to locate persister (Hibernate 5.0) -

python - ValueError: empty vocabulary; perhaps the documents only contain stop words -

ubuntu - collect2: fatal error: ld terminated with signal 9 [Killed] -