2016-07-03 32 views
12

Mam projekt C++, który buduje przy użyciu CMake. Zwykle buduję na systemie OSX, ale teraz próbuję uzyskać również wersję dla systemu Windows. Chciałbym użyć Clang w Windows ze względu na kompatybilność.Jak powiedzieć CMake, aby używać Clang w systemie Windows?

Zainstalowałem skompilowane Clang 3.8 binarnego z LLVM:

C:\Program Files\LLVM\bin\clang.exe 
C:\Program Files\LLVM\bin\clang++.exe 

Jest również zainstalowany na mojej ścieżce:

>clang++ 
clang++.exe: error: no input files 

Mam dwa pytania:

  1. Jak powiedzieć CMake używać clang++, kiedy zadzwonię cmake --build?
  2. Jak mogę sprawdzić przed zbudowaniem kompilatora CMake?
+0

Istnieje plik 'toolchain.txt', odnośnik do tego w dokumentach. –

+0

W ubuntu używam CC = 'g ++ -m64' kiedy wywołuję kompilator g ++ poprzez Make (Make ma $ (CC) w nim) Używam CC = "clang ++ -m64", aby wywołać clang ++. (Nie używam CMake'a ani Windows) –

+0

Co jest nie tak z użyciem '-DCMAKE_CXX_COMPILER = C:/path/to/clang ++'? – usr1234567

Odpowiedz

25

Potrzebujesz również - oprócz samych kompilatorów Clang - środowiska kompilacji/linków dla systemu Windows.

Najnowsze wersje CMake 3.6 mają kilka zintegrowanych obsługiwanych środowisk kompilacji Clang w systemie Windows (np. Visual Studio, Cygwin, patrz Release Notes).

Właśnie pomyślnie przeprowadzić test z

Wszystkie zainstalowane na ich standardu ścieżki z ich katalogami bin na całym świecie PATH środowiska.

Część, o której trzeba wiedzieć, to ustawienie odpowiedniego zestawu narzędzi za pomocą opcji wiersza poleceń CMake -T"LLVM-vs2014". Podczas procesu konfiguracji program CMake poinformuje Cię, który kompilator znalazł/wziął.

CMakeLists.txt

cmake_minimum_required(VERSION 3.6) 

project(HelloWorld) 

file(
    WRITE main.cpp 
     "#include <iostream>\n" 
     "int main() { std::cout << \"Hello World!\" << std::endl; return 0; }" 
) 
add_executable(${PROJECT_NAME} main.cpp) 

Konsola systemu Windows

...> mkdir VS2015 
...> cd VS2015 
...\VS2015> cmake -G"Visual Studio 14 2015" -T"LLVM-vs2014" .. 
-- The C compiler identification is Clang 3.9.0 
-- The CXX compiler identification is Clang 3.9.0 
-- Check for working C compiler: C:/Program Files (x86)/LLVM/msbuild-bin/cl.exe 
-- Check for working C compiler: C:/Program Files (x86)/LLVM/msbuild-bin/cl.exe -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: C:/Program Files (x86)/LLVM/msbuild-bin/cl.exe 
-- Check for working CXX compiler: C:/Program Files (x86)/LLVM/msbuild-bin/cl.exe -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
-- Configuring done 
-- Generating done 
-- Build files have been written to: .../VS2015 
...\VS2015> cmake --build . 
Microsoft (R)-Buildmodul, Version 14.0.23107.0 
[...] 
...\VS2015> Debug\HelloWorld.exe 
Hello World! 

Instalacja Wskazówki

Należy pamiętać, że dodałem LLVM do moich ścieżek wyszukiwania podczas instalacji:

LLVM Installation with Add to PATH

I można CrossCheck dostępne "platformę tych folderów" w każdym projekcie VS na stronie własności:

VS Project Properties - Platform Toolsets

Referencje

+0

Dziękuję! Brakowało mi trochę' -T "LLVM-vs2014" ' – sdgfsdh

+0

strasznie mylące." CMake powinien rozważyć zmianę -G na MSBuild, ponieważ to jest to, co wyprowadza, i podopcje do ustaw aktualny toolchain kompilatora – kchoi

+0

Weird CMake nadal wybiera domyślny 'cl.exe' na moim komputerze, robiąc to z Microsoft Visual Studio 2015, CMake 3.7.1 i LLVM/Clang 3.9.1:' Identyfikator kompilatora CXX to MSVC 19.0 .24215.1'. –