help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to deal with filenames with spaces and dollar signs?


From: David Wuertele
Subject: How to deal with filenames with spaces and dollar signs?
Date: Thu, 9 Nov 2006 00:20:52 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

I'm making a makefile library that has to stand up to some chaotic file naming
schemes.  I need make to copy some files around, only when necessary, without
getting confused by filenames with spaces and special (ie make-meaningful)
characters.

One problem I have is that make chokes on spaces and $ characters.  For example,
take this makefile:

all: clean source-files print-SOURCE_FILES

SOURCE_DIR := source-dir

.PHONY: clean
clean:
        rm -rf $(SOURCE_DIR)

.PHONY: source-files
source-files:
        mkdir $(SOURCE_DIR)
        echo "one" > $(SOURCE_DIR)/one
        echo "two" > $(SOURCE_DIR)/two
        mkdir $(SOURCE_DIR)/three
        echo "four" > $(SOURCE_DIR)/three/four
        echo "five" > $(SOURCE_DIR)'/three/file! with? $$special %characters\
 in: its.name.'
        mkdir $(SOURCE_DIR)'/three/directory! with? $$special %characters in:\
 its.name.'
        echo "six" > $(SOURCE_DIR)'/three/directory! with? $$special %charact\
ers in: its.name.'/six


SOURCE_FILES := $(shell find $(SOURCE_DIR))

print-%:
        @echo $* = $($*)


When I run make on this makefile, here's what I see:

$ make
rm -rf source-dir
mkdir source-dir
echo "one" > source-dir/one
echo "two" > source-dir/two
mkdir source-dir/three
echo "four" > source-dir/three/four
echo "five" > source-dir'/three/file! with? $special %characters in: its.name.'
mkdir source-dir'/three/directory! with? $special %characters in: its.name.'
echo "six" > source-dir'/three/directory! with? $special %characters in:\
 its.name.'/six
SOURCE_FILES = source-dir source-dir/one source-dir/two source-dir/three
source-dir/three/four source-dir/three/file! with? %characters in: its.name.
source-dir/three/directory! with? %characters in: its.name.
source-dir/three/directory! with? %characters in: its.name./six

I want the SOURCE_FILES variable to be a list of every directory and file in
the source-dir.  But files with spaces in their names will get split on the
spaces, and files with dollar signs in their names will lose a character.

I use this SOURCE_FILES variable to move files around using cpio.  I need to
give cpio accurate file listings, and I need for make to understand which files
are out of date.  Can anyone recommend a better solution than $(shell find
$(SOURCE_DIR)?

Thanks,
Dave






reply via email to

[Prev in Thread] Current Thread [Next in Thread]