2016-07-03 116 views
12

Ho un progetto C++ che costruisce usando CMake. Generalmente su OSX, ma ora sto cercando di far funzionare anche una versione di Windows. Vorrei usare Clang su Windows per motivi di compatibilità.Come posso dire a CMake di usare Clang su Windows?

ho installato il Clang 3.8 binario precompilato da LLVM:

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

E 'inoltre installato sul mio cammino:

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

Ho due domande:

  1. Come devo dire a CMake di usare clang++ quando chiamo cmake --build?
  2. Come posso verificare prima di creare con quale compilatore CMake è configurato?
+0

C'è il file 'toolchain.txt', cercare questo nei documenti. –

+0

Su ubuntu, uso CC = 'g ++ -m64' quando invoco il compilatore g ++ tramite Make (Make ha $ (CC) in esso) Io uso CC = "clang ++ -m64 'per invocare clang ++. (Non uso CMake né Windows) –

+0

Cosa c'è di sbagliato nell'usare '-DCMAKE_CXX_COMPILER = C:/percorso/in/clang ++'? – usr1234567

risposta

25

È inoltre necessario, oltre ai compilatori Clang, un ambiente di build/collegamento per Windows.

Le ultime build di CMake 3.6 hanno diversi ambienti di compilazione integrati Clang supportati su Windows (ad esempio Visual Studio, Cygwin; vedere Release Notes).

Ho appena eseguito un test di successo con

tutti installati per il loro standard percorsi con le loro directory bin nel globale PATH ambiente.

La parte che è necessario conoscere è impostare il set di strumenti corretto con l'opzione della riga di comando di CMake -T"LLVM-vs2014". Durante il processo di configurazione CMake ti farà sapere quale compilatore ha trovato/preso.

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) 

Console di 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! 

installazione Suggerimenti

prega di notare che ho aggiunto LLVM ai miei percorsi di ricerca durante l'installazione:

LLVM Installation with Add to PATH

E si può confronta le "set di strumenti della piattaforma" disponibili nella pagina delle proprietà di qualsiasi progetto VS:

VS Project Properties - Platform Toolsets

Riferimenti

+0

Grazie! Il bit che mi mancava era '-T" LLVM-vs2014 "' – sdgfsdh

+0

terribilmente confuso. CMake dovrebbe considerare di cambiare -G in MSBuild perché questo è ciò che sta producendo, e sub-opzioni a imposta l'attuale compilatore toolchain – kchoi

+0

Weird. CMake sceglie ancora il predefinito 'cl.exe' sulla mia macchina quando fa questo con Microsoft Visual Studio 2015, CMake 3.7.1 e LLVM/Clang 3.9.1:' L'identificazione del compilatore CXX è MSVC 19.0 .24215.1'. –