On Wed, 7 Nov 2018 at 16:01, Peter Dimov via Boost
The first level of quoting is b2 quoting:
using clang-win : : "C:\\Program Files\\LLVM\\clang-cl.exe" ;
Here the quotes and the backslashes are b2 quoting; the value itself ends up 'C:\Program Files\LLVM\clang-cl.exe' (without the single quotes of course.)
If you don't quote, as in
using clang-win : : C:/Program Files/LLVM/clang-cl.exe ;
b2 will split this on the space character and the value will be a list of `C:/Program` and `Files/LLVM/clang-cl.exe`.
With
using clang-win : : "C:\\Program Files\\LLVM\\clang-cl.exe" -fuse-ld=lld ;
the result is a list of `C:\Program Files\LLVM\clang-cl.exe` and `-fuse-ld=lld`.
The second level of quoting, which clang-win.jam applies to the above list manually with
compiler = "\"$(compiler)\"" ;
is for the Windows command line. The result is a command line of the form
"C:\Program Files\LLVM\clang-cl.exe" "-fuse-ld=lld" <args>
It's not clang-cl.exe that strips the quotes here, it's cmd.exe. Without the quotes, it will give an error that `C:\Program` isn't found.
The quotes around `-fuse-ld=lld` are unnecessary in this case, as this argument has no spaces, but they don't hurt. They would be needed for something like (hypothetically) "-fsome-path=C:\Program Files\somepath".
Thanks for the clarification. degski -- *“If something cannot go on forever, it will stop" - Herbert Stein*