degski wrote:
So, -fuse-ld=lld is quoted in the command. It appears [looks like] clang-cl.exe gobbles the quotes, though, i.e. it seems to work.
A simple test [slow brain I guess, alzheimers' kicking in] confirms the above:
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".