Ответ 1
Я использовал следующий метод для компиляции clang для С++ в Windows 7, и он был проверен Mystical и другими:
- Загрузите и установите MinGW (убедитесь, что вы установили компилятор С++) и поместите папку bin в свой PATH (у меня есть MinGW 4.6.1 и успешно протестирован на другом компьютере с 4.6.2)
- У вас есть Python в вашей PATH ( не 3, у меня 2,7)
- (Необязательно: убедитесь, что у вас есть Perl в PATH (я использовал ActivePerl 5.14.2 64-bit))
- Получить CMake и поместить его в свой PATH
- Перейдите на страницу LLVM и загрузите исходный код LLVM 3.0 вместе с исходным кодом Clang. Не извлекайте код из SVN, он не работает с заголовками MinGW.
- Извлечь исходные коды; У меня был источник llvm в папке с именем llvm-3.0.src на моем рабочем столе.
- Поместите источник clang прямо в папку под названием "clang" (он должен быть вызван именно так, или вы будете строить llvm, но clang не будет создан) в папке "tools" внутри исходной папки llvm, это должно сделать ваши каталоги выглядят так:
- источник llvm
- папка autoconf
- ...
- папка с инструментами
- ...
- папка clang
- папка привязок
- ...
- Файл Makefile
- ...
- ...
- ...
- источник llvm
- Создайте папку с именем "build" в том же каталоге, что и исходная папка llvm
- Откройте командную строку и cd в папке сборки
-
Запустите команду
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ..\llvm-3.0.src
-
(последним аргументом является относительный путь к папке с источником llvm в ней (и источником clang в подкаталоге tools/clang))
-
Это будет делать эквивалент команды "configure", а make файлы и все будут сгенерированы в папке сборки
- Это займет несколько минут.
-
-
Запустите команду
mingw32-make
- Это будет компилировать llvm и clang, а исполняемые файлы clang будут сгенерированы в папке build/bin
- Это, вероятно, займет много времени. (Вы можете попытаться ускорить его, добавив параллельные сборки,
-j<number>
). Возможно, было бы неплохо закрыть все другие программы, чтобы ваш компьютер мог сконцентрироваться, и поэтому они не мешают длительному процессу компиляции, например, блокировка папки, которую пишет компилятор (это случилось со мной). Я даже отключил свое антивирусное и брандмауэр-программное обеспечение, чтобы они не пытались сканировать сгенерированные файлы и мешать.
Время для тестирования
-
Создайте .cpp файл в папке build/bin (я буду использовать hello.cpp). Используйте стандартный заголовок библиотеки, чтобы убедиться, что включенные пути и библиотеки работают. Начните с очень простой программы.
(Что я начал с:
#include <iostream> int main() { std::cout << "hi"; }
)
-
Запустите команду
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 указывает каталог для поиска библиотек и -l указывает библиотеку для ссылки) (Если у вас нет MinGW, установленного на том же пути, что и я, вы можете узнать пути с помощью команды "g++ somefile.cpp -v", чтобы получить g++, чтобы различить его кишки о том, какие параметры он использует для путей библиотеки и библиотечные файлы и все остальное Найдите ближе к концу вывода для опций -L и -l. Помните имена файлов .o, которые перемежаются с -L. Clang использует многие из тех же параметров, что и g++, поэтому я буквально скопировал и вставил эту строку из вывода g++)
Это должно скомпилировать вашу программу и создать файл с именем a.out
-
переименуйте a.out в a.exe или что-то еще
- Запустите .exe
- Ваша программа должна работать.
У Clang (3.0) все еще есть некоторые проблемы в Windows (я не знаю, находятся ли эти проблемы в Linux). Например, компиляция лямбда (которая не поддерживает) не может быть связана с -std = С++ 0x, что приведет к сбою и вызову ошибки диагностики. (Мне сообщили об IRC LLVM, что это связано с тем, что clang реализует синтаксический анализ для lambdas, но не семантический анализ, который является фазой, в которой он сбой (поскольку они забыли отключить разбор lambdas для версии 3.0), и они уже знают об этом ошибка)
Кроме того, знаменитый Мистик любезно согласился проверить это руководство и сделал несколько замечаний во время его тестирования:
- Заголовки Windows, похоже, работают.
- В настоящее время работает только для 32-разрядных.
- 64-разрядные компиляции отлично, но не собираются.
- SSE, вероятно, в порядке. ([Mystical не проверил] работоспособный SSE на 32-битном, хотя.)