Ouvi falar do clang-cl como uma versão "com sabor da Microsoft" do clang, mas olhando minha configuração, estou observando o seguinte:
- Tenho um clang executável nos meus diretórios msys2
- Tenho um executável clang-cl nos meus diretórios msys2
- Tenho um clang executável nos meus diretórios de ferramentas de construção do Visual Studio
- Tenho um executável clang-cl nos meus diretórios de ferramentas de construção do Visual Studio
Quais são as diferenças entre essas versões? (No final das contas, gostaria de ver se vale a pena o esforço de adicionar suporte para clang-cl na minha estrutura de compilação)
Dados adicionais: Chamar cada um deles com -v me dá o resultado Target: x86_64-w64-windows-gnu
para o primeiro e Target: x86_64-pc-windows-msvc
para todos os outros.
clang
[++
] vsclang-cl
normalmente afeta apenas o estilo dos argumentos da linha de comando.clang
[++
] é semelhante ao GCC e é a interface primária.clang-cl
é semelhante ao MSVC (MSVC =cl.exe
).Aparentemente, no MSYS2 Clang ele também alterna do modo compatível com MinGW para o modo compatível com MSVC (veja
--target
abaixo).Você pode usar
clang
[++
] eclang-cl
para compilar programas compatíveis com MSVC. (Embora o primeiro exija saber quais sinalizadores passar, o que não é óbvio.) Duvido que faça sentido usarclang-cl
para compilar programas não compatíveis com MSVC (como os compatíveis com MinGW ou não compatíveis com Windows).A compilação oficial do Clang vs MSYS2 Clang afeta o padrão
--target=...
(usando MSVC ABI e bibliotecas vs MinGW ABI e bibliotecas). Isso pode ser visto emclang --version
.O Clang instalado pelo Visual Studio, assim como o do instalador oficial do Clang, usa MSVC-compatível
--target
por padrão. Não sei se há alguma diferença entre eles.Se você oferece suporte a MSVC (
cl.exe
), o suporteclang-cl
é trivial, porque os sinalizadores são (na maioria?) os mesmos.