> > > > > I've got these rules to transcode my .flac music files to .mp3: > > > > > > FLACS := $(shell find ./flac -name "*.flac" -print) > > > > > > MP3 := $(patsubst ./flac/%.flac,./mp3/%.mp3,$(FLACS)) > > > > Why do you even need these two lines? They seem extraneous, as you > > never use the resulting variables. > > Actually this line was missing from my post: > > all: $(MP3) > > So I only have to type 'make' to encode/update my .flac collection. > > > The problem is that all of the built-in make functions treat variables > > containing lists of items as "words separated by spaces" and there is no > > way to change that with quoting. So if you want to use built-in > > functions like patsubst and so on that act on variables containing lists > > of things, prepare for it to not work when an item in the list contains > > spaces. > > > > If you avoid the built-in functions then you might be able to get by > > with just proper shell quoting alone. > > OK, this makes sense now. Is the culprit 'shell' or 'patsubst' or both? > > Thanks for your clear explanation, > >
The problem is $(patsubst ) and this will be true for any Make function. To quote Paul Smith: > You cannot, in general, use GNU make (or any other standard make) with > pathnames containing spaces. It just won't work. Pathnames in > makefiles are really parsed as text strings, and virtually every > function and internal processing splits the strings on whitespace. > Further, there is no 100% recognized and reliable way to quote > whitespace in these strings. What is true for pathnames is also true for filenames. The only reasonable way I can think of is to either rename all your files to not have spaces or use sentinel files (which would be ugly, messy and just painful). You can do a mass rename with something like this in a bash shell (untested) find . -name *.flac | while read f; do mv "$f" `echo "$f" | sed 's/ /-/g'`; done -raleigh _______________________________________________ Help-make mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-make
