CMAKE_LINKER incorrectly resolves to ld.lld with Clang on Windows
When building with clang (not clang-cl) on Windows, CMAKE_LINKER is detected as ld.lld.exe, (the LLVM ELF linker) yet CMake actually performs linking using lld-link.exe (the LLVM COFF linker).
CMAKE_LINKER should be detected as the full path to lld-link.exe in this instance.
To reproduce:
CMakeLists.txt
cmake_minimum_required(VERSION 3.18)
project(LinkerTest C)
message("CMAKE_C_CREATE_SHARED_LIBRARY=${CMAKE_C_CREATE_SHARED_LIBRARY}")
message("CMAKE_C_CREATE_SHARED_MODULE=${CMAKE_C_CREATE_SHARED_MODULE}")
message("CMAKE_C_LINK_EXECUTABLE=${CMAKE_C_LINK_EXECUTABLE}")
message("")
message("CMAKE_LINKER=${CMAKE_LINKER}")
Output:
# Assumes we're running in VS x64 command prompt.
$ cmake . -DCMAKE_C_COMPILER=clang -GNinja
...
CMAKE_C_CREATE_SHARED_LIBRARY=<CMAKE_C_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES>
CMAKE_C_CREATE_SHARED_MODULE=<CMAKE_C_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES>
CMAKE_C_LINK_EXECUTABLE=<CMAKE_C_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <LINK_LIBRARIES>
CMAKE_LINKER=C:/Program Files/LLVM/bin/ld.lld.exe