Bâtiment avec CMake, Ninja et Clang sur Windows

Chers codeurs C++,

après à l'aide de Visual Studio chaîne d'outils pour la construction sur windows depuis un moment, j'ai décidé de donner Clang 5 d'un coup.

J'ai installé la VERSION 5.0.0 binaires, le Ninja de l'environnement de compilation, le VS 2017 Outils et CMake 3.9.3. Le but final est d'être en mesure de compiler des applications C et C++ pour Windows à l'aide de VS de Code avec CMake l'intégration comme "IDE" et Clang avec LLD comme compilateur et l'éditeur de liens.

La compilation et l'exécution d'un programme simple a fonctionné parfaitement bien (capture d'écran de chaque terminal de l'histoire). Clang détecté automatiquement la lib standard pour Windows dans le VS Outils répertoires et produit un exécutable de sortie.

L'étape suivante a été mise en place simple à construire avec Ninja (capture d'écran de ninja.fichier de build et le terminal de l'histoire). Le processus de compilation a fonctionné comme prévu et produit un travail exécutable, tout comme avant.

Les problèmes commencent quand j'ai commencé à intégrer CMake dans le processus. Mon espoir est que CMake produit un ninja fichier de build et l'exécute, correct?
J'ai essayé les CMakeLists fichier

cmake_minimum_required(VERSION 3.9)

project(Test)

add_executable(Test main.c)

et appelé CMake avec cmake -G Ninja.
Le résultat a été décevant et je ne comprends pas assez de figure, respectivement, de résoudre le problème moi-même.

-- The C compiler identification is Clang 5.0.0
-- The CXX compiler identification is Clang 5.0.0
-- Check for working C compiler: C:/Meine_Programme/LLVM/bin/clang.exe
-- Check for working C compiler: C:/Meine_Programme/LLVM/bin/clang.exe -- broken
CMake Error at C:/Meine_Programme/CMake/share/cmake-3.9/Modules/CMakeTestCCompiler.cmake:51 (message):
  The C compiler "C:/Meine_Programme/LLVM/bin/clang.exe" is not able to
  compile a simple test program.

  It fails with the following output:

   Change Dir: D:/Dateien/Downloads/Test/CMakeFiles/CMakeTmp



  Run Build Command:"C:/Meine_Programme/Ninja_Build/ninja.exe" "cmTC_eeb5c"

  [1/2] Building C object CMakeFiles\cmTC_eeb5c.dir\testCCompiler.c.obj

  FAILED: CMakeFiles/cmTC_eeb5c.dir/testCCompiler.c.obj 

  C:\Meine_Programme\LLVM\bin\clang.exe /nologo /DWIN32 /D_WINDOWS /W3 /MDd
  /Zi /Ob0 /Od /RTC1 /showIncludes
  /FoCMakeFiles\cmTC_eeb5c.dir\testCCompiler.c.obj
  /FdCMakeFiles\cmTC_eeb5c.dir\ -c testCCompiler.c

  clang.exe: error: no such file or directory: '/nologo'

  clang.exe: error: no such file or directory: '/DWIN32'

  clang.exe: error: no such file or directory: '/D_WINDOWS'

  clang.exe: error: no such file or directory: '/W3'

  clang.exe: error: no such file or directory: '/MDd'

  clang.exe: error: no such file or directory: '/Zi'

  clang.exe: error: no such file or directory: '/Ob0'

  clang.exe: error: no such file or directory: '/Od'

  clang.exe: error: no such file or directory: '/RTC1'

  clang.exe: error: no such file or directory: '/showIncludes'

  clang.exe: error: no such file or directory:
  '/FoCMakeFiles\cmTC_eeb5c.dir\testCCompiler.c.obj'

  clang.exe: error: no such file or directory:
  '/FdCMakeFiles\cmTC_eeb5c.dir\'

  ninja: build stopped: subcommand failed.





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:3 (project)


-- Configuring incomplete, errors occurred!
See also "D:/Dateien/Downloads/Test/CMakeFiles/CMakeOutput.log".
See also "D:/Dateien/Downloads/Test/CMakeFiles/CMakeError.log".

Je suppose que le problème est lié à CMake appel clang avec VS options de style à l'aide de slash au lieu de précédées par moins, comme clang exige.

Merci pour m'avoir aidé les gars, j'apprécie 🙂

Juste me laisser un commentaire si vous avez besoin de plus amples informations.

Réponse à Florians post

J'ai essayé Florians de commande, mais omis le chemin de ninja pour une courte notation et il s'est avéré très bien fonctionner.

cmake -E env LDFLAGS="-fuse-ld=lld"  cmake -H. -G Ninja -Bbuild -DCMAKE_C_COMPILER:PATH="C:\MeineProgramme\LLVM\bin\clang.exe" -DCMAKE_CXX_COMPILER:PATH="C:\MeineProgramme\LLVM\bin\clang++.exe" -DCMAKE_C_COMPILER_ID="Clang" -DCMAKE_CXX_COMPILER_ID="Clang" -DCMAKE_SYSTEM_NAME="Generic"

CMake produit un ninja du fichier build.

J'ai couru ninja all pour construire l'exécutable comme Test. Je l'ai renommé pour Test.exe et le programme exécuté heureusement. De si loin... de la réussite!!! Mais beaucoup plus compliqué que ce que j'attendais.

  • Pas de réponse à votre question, mais peut aider: stackoverflow.com/a/38174328/2436175
  • Merci pour votre réponse, mais il ressemble à CMake n'est pas en mesure de spécifier un ensemble d'outils pour la Ninja. J'ai essayé cmake -G Ninja -T LLVM-VS2017 mais il m'a dit, que la spécification d'un ensemble d'outils n'est pas pris en charge pour le générateur, du mauvais :-(je n'aurais pas été surpris si cela a fonctionné parce que, comme mentionné ci-dessus, en fait, je dois avoir tous les outils nécessaires installés à l'exception VS Studio
InformationsquelleAutor Simon | 2017-10-03