Construindo com o CMake, Ninja e Clang no Windows

Caros colegas codificadores C ++,

depois de usar a cadeia de ferramentas do Visual Studio para criar janelas por um tempo, decidi experimentar o Clang 5.

Instalei os binários LLVM 5.0.0, o ambiente de construção Ninja, o VS 2017 Tools e o CMake 3.9.3. O objetivo final é poder compilar aplicativos C e C ++ para Windows usando o VS Code com a integração do CMake como "IDE" e Clang com LLD como compilador e vinculador.

A compilação e execução de um programa simples funcionou perfeitamente bem (captura de tela do histórico do terminal respectivo) Clang detectou automaticamente a lib padrão para Windows nos diretórios do VS Tools e produziu uma saída executável.

O próximo passo foi configurar uma compilação simples com o Ninja (captura de tela do arquivo ninja.build e histórico do terminal) O processo de compilação funcionou conforme o esperado e produziu um executável funcional, como antes.

Os problemas começaram quando comecei a integrar o CMake ao processo. Minha expectativa é que o CMake produza um arquivo de construção ninja e o execute, correto? Eu tentei o seguinte arquivo CMakeLists

cmake_minimum_required(VERSION 3.9)

project(Test)

add_executable(Test main.c)

e chamado CMake comcmake -G Ninja. A saída resultante foi decepcionante e eu não entendo o suficiente para descobrir, respectivamente, resolver o problema sozinho.

-- 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".

Eu acho que o problema está relacionado ao CMake chamar clang com opções de estilo VS usando barra em vez de precedido por menos, como o clang exige.

Obrigado por me ajudar, pessoal, agradeço :-)

Deixe-me um comentário se precisar de mais informações.

Resposta à publicação da Flórida

Tentei o comando da Flórida, mas omiti o caminho para o ninja para uma notação mais curta e acabou funcionando muito bem.

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"

O CMake produziu um arquivo de construção ninja.

Eu corrininja all para construir o executável comoTest. Eu o renomei paraTest.exe e o programa foi executado com satisfação. Até agora ... sucesso !!! Mas muito mais complicado do que eu esperava.

questionAnswers(3)

yourAnswerToTheQuestion