ragnarok - Variável de ambiente usada pelo CMake para detectar ferramentas de compilador do Visual C++ para Ninja




ninja build ragnarok (2)

Eu tenho ferramentas de compilador Mingw64 GCC 6.3.0 (sempre no PATH ) e Visual C ++ do Visual Studio 2017 RTM (não no PATH ).

Se eu corro cmake . -G "MinGW Makefiles" cmake . -G "MinGW Makefiles" , o GCC 6.3.0 será selecionado.

Se eu corro cmake . -G "Ninja" cmake . -G "Ninja" , o GCC 6.3.0 será selecionado.

Meu Visual C ++ ferramentas de compilador não é nenhum padrão, eu só mantenho as partes que eu preciso e apago o resto (como MSBuild, IDE etc.). Eu uso meu próprio script em lote para configurar PATH , INCLUDE e LIB (funciona muito bem).

Se eu executar esse script em lote e executar o cmake . , O MSVC será selecionado e criado com o NMake.

Com o mesmo ambiente, cmake . -G "Ninja" cmake . -G "Ninja" , GCC 6.3.0 é selecionado em vez de MSVC.

Então, minha pergunta é, como dizer ao CMake que eu quero usar o MSVC + Ninja ao invés do GCC + Ninja quando ambos estão no PATH ? Qualquer variável de ambiente devo definir?


Você também pode usar a abordagem invertida e excluir todos os compiladores que não deseja com CMAKE_IGNORE_PATH . Ele pega uma lista de caminhos para ignorar, mas esteja ciente de que precisa ser uma correspondência exata de string. A vantagem seria que você pode declará-los diretamente da linha de comando.

Então, o que eu fiz foi pegar o caminho do compilador encontrado mas "não ser levado" para o CMAKE_IGNORE_PATH .

E no meu sistema, na verdade, havia três compiladores GCC no meu PATH (apenas certifique-se de iniciar a partir de um diretório de saída binário vazio a cada tentativa):

> cmake -G"Ninja" ..
...
-- Check for working C compiler: C:/MinGW/bin/cc.exe
...
> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Strawberry/c/bin/gcc.exe
...
> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Program Files (x86)/LLVM/bin/clang.exe
...
> cmake -DCMAKE_IGNORE_PATH="C:/MinGW/bin;C:/Strawberry/c/bin;C:/Program Files (x86)/LLVM/bin" -G"Ninja" ..
...
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
...

use um arquivo toolchain

set(CMAKE_C_COMPILER cl.exe)
set(CMAKE_CXX_COMPILER cl.exe)

então construa seu projeto cmake com with -DCMAKE_TOOLCHAIN_FILE = toolchainfile





ninja