Existe-t-il un moyen de faire fonctionner GNU make avec des noms de fichiers contenant des deux-points?Echapper des deux-points dans les noms de fichiers dans un Makefile
Le problème spécifique que je rencontre concerne une règle de modèle. Voici une version simplifiée qui ne dépend pas de tabulation couper et coller des caractères:
% make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-redhat-linux-gnu
% cat Makefile
COLON := \:
all: ; true
%.bar: ; cp $< [email protected]
x.bar: x.foo
%.foo: ; touch [email protected]
a$(COLON)b.bar: a$(COLON)b.foo
all: x.bar a$(COLON)b.bar
clean: ; rm -f *.foo *.bar
% make clean
rm -f *.foo *.bar
% make
touch x.foo
cp x.foo x.bar
cp a\:b.bar
cp: missing destination file operand after `a:b.bar'
Try `cp --help' for more information.
make: *** [a\:b.bar] Error 1
Remplacement $ (COLON) avec un littéral: produit exactement le même résultat. Sans la barre oblique inverse, il le fait:
Makefile:6: *** target pattern contains no `%'. Stop.
Assez bon hack! Je vais bien avec $ (shell), ma question était spécifique à GNU make de toute façon. Je suppose que ce serait un exemple de «mauvais agencement de fichiers temporaires» dont l'autre réponse parlait. Je m'inquiète un peu de ce qui se passe dans le cas où la chose qui "ls" est un espace réservé pour échouer et $ (POST) ne fonctionne donc pas. Je veux dire, je suppose que c'est probablement la plupart du temps OK parce que $ (PRE) est idempotent, non? Et si vous avez des @ COLON @ s réels dans vos noms de fichiers, vous utilisez simplement un espace réservé encore plus long et plus ridicule, peut-être avec une longue chaîne aléatoire intégrée .... – zaphod