Hi, [Please retain the CC to [EMAIL PROTECTED] so that the Debian Bug Tracking system can record your input] The following report was submitted by a Debian user. It has been independently verified. manoj If a filename contains a space or a dollar, make/its default rules fail to escape or quote the name correctly when invoking the compiler. Here's how to reproduce this problem: cat >Makefile <<__EOF__ all: pound dollar space @echo "It all works!" pound: pound\#file.o @echo "Pounds work" dollar: dollar$$file.o @echo "Dollars work" space: space\ file.o @echo "Spaces work" clean: @rm *.o __EOF__ cat /dev/null >'pound#file.c' cat /dev/null >'dollar$file.c' cat /dev/null >'space file.c' make -k cc -c -o pound#file.o pound#file.c Pounds work cc -c -o dollar$file.o dollar$file.c cc: dollar.c: No such file or directory cc: No input files make: *** [dollar$file.o] Error 1 cc -c -o space file.o space file.c cc: cannot specify -o with -c or -S and multiple compilations make: *** [space file.o] Error 1 make: Target `all' not remade because of errors. (beware the tabs of course ;-)) Things to note: * 'cc dollar$file.o', $file is not set so cc tries to read 'dollar.c' and fails. The $ should have been escaped but there is no way to escape it in the Makefile that will work. * 'cc space file.c', same thing, the space is not escaped so cc tries to read 'space.c' and fails. Adding an additional \ in the Makefile results in make complaining it cannot find 'space\ file.c'. * Putting single or double quotes around the troublesome filenames does not work: make takes them to be part of the file name. * Escaping the pound sign works. I'm not sure how make invokes cc (via fork()/exec(), system(), sh?), but it seems no shell is involved since '#' would make the start of the comments. * '$' behaves strangely. It is interpreted by make before anything else, including '\'. So '\$' does not work and one must use '$$' (which is documented). This is a bit confusing. Would it break many makefiles if '\' were interpreted first so that '\$' is equivalent to '$$'? * Workaround: adding rules like the one below solve this problem: .c.o: cc -c -o '$*.o' '$<' * Optional question: how would one write a generic command to link a bunch of object files containing spaces together? It seems "'$^'" would not work. -- If I were a grave-digger or even a hangman, there are some people I could work for with a great deal of enjoyment. Douglas Jerrold Manoj Srivastava <[EMAIL PROTECTED]> <http://www.debian.org/%7Esrivasta/> 1024R/C7261095 print CB D9 F4 12 68 07 E4 05 CC 2D 27 12 1D F5 E8 6E 1024D/BF24424C print 4966 F272 D093 B493 410B 924B 21BA DABB BF24 424C _______________________________________________ Bug-make mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-make