Loop/wildcard-like syntax for GNU make?

Parv parv at pair.com
Wed Apr 18 02:47:03 UTC 2007

in message <26face530704171751r243ccf01sbb6d4572e8006a68 at mail.gmail.com>,
wrote Kelly Jones thusly...

Would you mind cutting the number of mailing lists? I think a|any
technical list would have been enough.

Anyway ...

>  Here's a Makefile that converts 3 GIFs to JPGs in a given directory:
>  1.jpg: 1.gif
>        /usr/local/bin/convert 1.gif 1.jpg
>  2.jpg: 2.gif
>        /usr/local/bin/convert 2.gif 2.jpg
>  3.jpg: 3.gif
>        /usr/local/bin/convert 3.gif 3.jpg
>  How do I generalize this to apply to ALL the GIFs in a given
>  directory? I tried:
>  *.jpg: *.gif
>        /usr/bin/local/bin/convert $1.gif $1.jpg
>  but this obviously doesn't work (I didn't really expect it to). Neither does
>  for $i (*.jpg) {
>  $i.jpg: $i.gif
>         /usr/bin/local/bin/convert $i.gif $i.jpg
>  }

Following worked with both BSD & GNU make 3.81 (mind the

  #  Makefile
  	@for i in 1 2 3;\
  	do \
  		echo "i: $$i";\

... so some version of body of a target below should work for you
(mind the spaces|tabs) ...

  @cd "$$image_dir";\
  for f in *.gif;\
  do \
    new=$( basename "$$f" '.gif' )'.jpg';\
    convert "$$f" "$$new";\

  - Parv


More information about the freebsd-questions mailing list