J'ai utilisé la méthode suivante pour compiler clang pour C++ sur Windows 7 et elle a été validée par Mysticial et d'autres :
- Télécharger et installer MinGW (assurez-vous d'installer le compilateur C++) et mettez le dossier bin dans votre PATH (j'ai MinGW 4.6.1 et j'ai testé avec succès sur un autre ordinateur avec 4.6.2)
- Assurez-vous que vous avez Python dans votre PATH ( pas 3 j'ai 2.7)
- (Facultatif : Assurez-vous que vous avez Perl dans votre PATH (j'ai utilisé ActivePerl 5.14.2 64-bit))
- Obtenez CMake et mettez-le dans votre PATH
- Allez à la Page de téléchargement de LLVM et téléchargez le code source de LLVM 3.0 ainsi que le code source de Clang. Ne prenez pas le code du SVN, il ne fonctionne pas avec les en-têtes MinGW.
- Extraire les codes sources ; j'avais les sources de llvm dans un dossier nommé llvm-3.0.src sur mon bureau.
- Mettez les sources de clang directement dans un dossier appelé "clang" (il doit s'appeler exactement comme ça ou vous construirez llvm mais clang ne sera pas construit) dans le dossier "tools" à l'intérieur du dossier des sources de llvm, cela devrait donner les répertoires suivants :
- source llvm
- dossier autoconf
- ...
- dossier outils
- ...
- dossier clang
- dossier des fixations
- ...
- Fichier Makefile
- ...
- ...
- ...
- Créez un dossier nommé "build" dans le même répertoire que le dossier source de llvm.
- Ouvrez une ligne de commande et accédez au dossier de construction.
-
Exécutez la commande cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ..\llvm-3.0.src
-
(le dernier argument est le chemin relatif vers le dossier qui contient les sources llvm (et les sources clang dans le sous-répertoire tools/clang)).
-
Cela équivaut à une commande "configure", et les fichiers makefiles et tout le reste seront générés dans le dossier de construction.
-
Cela prendra quelques minutes
-
Exécutez la commande mingw32-make
- Cela compilera llvm et clang, et les exécutables clang seront générés dans le dossier build/bin.
- Cela prendra probablement beaucoup de temps. (Vous pouvez essayer de l'accélérer en ajoutant des constructions parallèles,
-j<number>
option) Il peut être bon de fermer tous les autres programmes afin que votre ordinateur puisse se concentrer et qu'ils n'interfèrent pas avec le long processus de compilation, par exemple en mettant un verrou sur un dossier dans lequel le compilateur écrit (cela m'est arrivé). J'ai même désactivé mon antivirus et mon pare-feu pour qu'ils n'essaient pas d'analyser les fichiers générés et ne se mettent pas en travers du chemin.
Il est temps de le tester
-
Créer un fichier .cpp dans le dossier build/bin (je vais utiliser hello.cpp). Utilisez un en-tête de bibliothèque standard pour vous assurer que les chemins d'inclusion et les bibliothèques fonctionnent. Commencez par un programme très simple.
(Ce avec quoi j'ai commencé :
#include <iostream>
int main() {
std::cout << "hi";
}
)
-
Exécutez la commande clang hello.cpp -std=c++0x -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++" -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++\mingw32" -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../.. -L/mingw/lib -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt
(-L spécifie un répertoire dans lequel chercher les bibliothèques et -l spécifie une bibliothèque à lier) (Si MinGW n'est pas installé au même endroit que moi, vous pouvez trouver les chemins avec la commande "g++ somefile.cpp -v" pour que g++ vous dise quelles options il utilise pour les chemins des bibliothèques, les fichiers de bibliothèques et tout le reste. Cherchez vers la fin de la sortie les options -L et -l. Faites attention aux noms de fichiers .o qui sont intercalés avec les -L. Clang utilise beaucoup des mêmes options que g++, donc j'ai littéralement copié et collé cette ligne à partir de la sortie de g++.)
Cela devrait compiler votre programme et produire un fichier nommé a.out.
-
renommez a.out en a.exe ou autre.
-
Exécutez le fichier .exe
-
Votre programme devrait s'exécuter.
Clang (3.0) a encore quelques problèmes sous Windows (je ne sais pas si ces problèmes existent aussi sous linux). Par exemple, la compilation d'un lambda (que clang ne supporte pas) avec -std=c++0x fera planter clang et émettra une erreur de diagnostic. (On m'a informé sur l'IRC de LLVM que c'est parce que clang implémente l'analyse syntaxique pour les lambdas mais pas l'analyse sémantique, qui est la phase dans laquelle il plante (parce qu'ils ont oublié de désactiver l'analyse syntaxique des lambdas pour la version 3.0), et ils sont déjà au courant de ce bogue).
Par ailleurs, l'illustre Mysticial a gentiment accepté de tester ce guide et a fait quelques observations lors de son test :
- Les en-têtes Windows semblent fonctionner.
- Actuellement, il ne fonctionne que pour le 32 bits.
- Le 64 bits compile bien, mais ne s'assemble pas.
- L'ESS est probablement bien. ([Mysticial n'a pas] testé un SSE fonctionnel sur 32 bits cependant).