somenxavier
somenxavier

Reputation: 1557

escape filenames in GNU Make

My file names have parentesis, tildes, etc. Example: 'Per a què serveixen les equacions de segon grau?.md'.

I have a simple Makefile:

$ cat Makefile 
%.md.html: %.md
    echo $<
    ls $<

When I run make with this makefile I get this error:

$ make Per\ a\ què\ serveixen\ les\ equacions\ de\ segon\ grau\?.md.html
echo Per a què serveixen les equacions de segon grau?.md
Per a què serveixen les equacions de segon grau?.md
ls Per a què serveixen les equacions de segon grau?.md
ls: no s’ha pogut accedir a 'Per': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'a': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'què': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'serveixen': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'les': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'equacions': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'de': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'segon': El fitxer o directori no existeix
ls: no s’ha pogut accedir a 'grau?.md': El fitxer o directori no existeix
make: *** [Makefile:3: Per a què serveixen les equacions de segon grau?.md.html] Error 2

because the filename itself is not escaped. Is there anyway to say something like: ls escape($<) in my makefile? Perhaps calling a bash command?

Upvotes: 0

Views: 148

Answers (1)

Andreas
Andreas

Reputation: 5301

For this particular example, quoting the automatic variable's will work:

echo "$<"
ls "$<"

However this trick doesn't work for optionally empty variables, or variables containing multiple files. Because of how GNU Make uses whitespace as delimiter in lists it's overall unsuited for dealing with filenames with whitespace in them.

Upvotes: 1

Related Questions