La version officielle de LLVM 4.0 pour Windows s'intègre à Visual Studio jusqu'à Visual Studio 2015. Malheureusement, il ne prend toujours pas en charge Visual Studio 2017.
Lorsque vous essayez de définir le Platform Toolset d'un projet sur LLVM-vs2014
, une erreur se produit.
Savez-vous un moyen de le faire fonctionner?
Mettre à jour
En 2018, LLVM 6.0 ne prend toujours pas officiellement en charge l'intégration à Visual Studio 2017 (version 15.X.X), mais uniquement à l'ensemble d'outils Visual Studio 2015 (version 14.X.X).
Enfin, j'ai trouvé un brillant rapport GitHub avec les jeux d'outils de la plate-forme MSBuild requis qui intègre LLVM clang 5.0.0 dans Visual Studio 2017. Après avoir suivi les instructions du fichier README, vous disposerez de deux nouveaux jeux d’outils de plate-forme, LLVM-vs2017
et LLVM-vs2017_xp
. Problème résolu.
Mettre à jour
J'ai créé un fichier fork qui a été mis à jour pour LLVM 6.0.0 et fournit une meilleure intégration en fournissant les chemins d'inclusion et de bibliothèque de LLVM/clang.
Merci à Royi , qui s’est rendu compte que les fichiers .prop
originaux sont explicitement conçus pour LLVM 5.0 et qu’il manquait l’ajout des dossiers lib
(
$(LLVMInstallDir)\lib
) et include
($(LLVMInstallDir)\lib\clang\6.0.0\include
) appropriés.
Certaines cibles msbuild ne sont livrées qu'avec le jeu d'outils C++ v140 et VS 2017 installe uniquement le jeu d'outils v141 par défaut. Si vous ouvrez le programme d'installation de VS 2017, recherchez la case à cocher pour le jeu d'outils v140 et installez-la. Les bonnes cibles ms ++ C++ seront disponibles et le tout fonctionnera.
Le projet LLVM prend désormais explicitement en charge Visual Studio 2017 via https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.llvm-toolchain
J'ai compris comment intégrer LLVM Clang 7.0 à la mise à jour 15.5.6 de Visual Studio 2017. v1913 avec prise en charge complète du débogage sous PDB à l'aide des dernières versions de LLVM.
c'est-à-dire, lld-link/DEBUG: GHASH; clang-cl -mllvm -emit-codeview-ghash-section Drapeau de clang-cl.
C'est un processus en trois étapes.
À partir de la mise à jour 15.4.5 de Visual Studio 2017, Clang C2 "expérimental" de Microsoft ne fonctionne plus. Par conséquent, les correctifs ci-dessus sont nécessaires pour utiliser clang pour compiler du code doté d'une capacité de débogage complète pour PDB (et pas seulement pour CodeView/Z7 limité). Cela devient également une suite plus complète pour les générations de test de portabilité, car vous pouvez créer et déboguer des PDB pour Windows en utilisant tous les composants LLVM, du compilateur Clang au backend LLVM codegen et à l'éditeur de liens LLVM.
À la vôtre, David
LLVM/Clang a maintenant un correctif mis à jour qui vous permet de l’utiliser avec VS2017. Mais ils ne supportent toujours pas directement VS2017. J'ai demandé à la liste de diffusion des développeurs LLVM de mettre à jour leur prise en charge de VS2017, alors j'espère qu'ils le feront. S'ils écoutent ce que j'ai dit.
Départ le 09 janvier 2018 http://planet.clang.org/
Regardez le "Essayez-le!" section:
Si vous utilisez déjà clang-cl et lld-link sous Windows aujourd'hui, vous pouvez essayer ceci. Deux indicateurs sont nécessaires pour l'activer, un pour le compilateur et un pour l'éditeur de liens: Pour permettre l’émission d’une section .debug $ H par le compilateur, vous devrez passer l’indicateur non documenté
-mllvm -emit-codeview-ghash-section
à clang-cl (cet indicateur devrait disparaître à l’avenir, une fois celui-ci considéré stable et assez bon pour être allumé par défaut) . Pour que lld-link utilise ces informations, vous devrez passer le/DEBUG:GHASH
à lld.
Vous devez simplement passer les indicateurs -mllvm -emit-codeview-ghash-section
dans votre zone projets c ++} "Ligne de commande: options supplémentaires" ou les placer directement dans le fichier "toolset.props" que vous avez créé dans C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\Win32\PlatformToolsets\LLVM-vs2017
ou C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Platforms\x64\PlatformToolsets\LLVM-vs2017
. .
La clé est qu'en ajoutant ces options cli, vous indiquez à clang d'émettre des informations de débogage que le lld (ou lld-link) comprendra et utilisera pour produire pleinement fichiers PDB remplis. Ce ne sont pas les limités qu'il a fabriqués avant les baisses de LLVM 7.0 antérieures au 9 janvier 2018.
toolset.targets: (toute version)
<Project ToolsVersion="14.1"
xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<Import Project="$(VCTargetsPath)\Microsoft.CppCommon.targets" />
</Project>
toolset.props: (version Win32)
<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Microsoft.Cpp.$(Platform).v141.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Microsoft.Cpp.$(Platform).v141.props')"/>
<Import Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Toolset.props" Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\v141\Toolset.props')"/>
<PropertyGroup>
<LLVMInstallDir>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\LLVM\LLVM)</LLVMInstallDir>
<LLVMInstallDir Condition="'$(LLVMInstallDir)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM\LLVM)</LLVMInstallDir>
<ExecutablePath>$(LLVMInstallDir)\msbuild-bin;$(ExecutablePath)</ExecutablePath>
<LibraryPath>$(LLVMInstallDir)\lib\clang\7.0\lib\windows;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<!-- remove the implicit vcxxx.pdb path to avoid rebuilds every time as clang-cl only supports /Z7 -->
<ProgramDataBaseFileName></ProgramDataBaseFileName>
<!-- Set the value of _MSC_VER to claim for compatibility -->
<AdditionalOptions>-m32 -fmsc-version=1913 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
</Project>
Pour x64, remplacez -m32
par -m64
j'ai également activé les compilateurs Microsofts ARM et ARM64 pour la création d'applications Windows-10-ARM natives (et non d'UWP modern-com-junk). Mais, pour l'instant, je n'ai pas suffisamment fouillé dans les sources clang pour configurer correctement quelque chose de similaire pour ARM en fonction de ce que -m32
et -m64
font pour Intel code-gen.
Voir ces articles: