Essas mensagens de erro
CMake Error at ... (project):
No CMAKE_C_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also ".../CMakeFiles/CMakeOutput.log".
See also ".../CMakeFiles/CMakeError.log".
ou
CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.
Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
...
-- Configuring incomplete, errors occurred!
apenas significa que o CMake não foi capaz de encontrar seu compilador C / CXX para compilar um programa de teste simples (uma das primeiras coisas que o CMake tenta ao detectar seu ambiente de construção).
As etapas para localizar seu problema dependem do ambiente de construção que você deseja gerar. Os tutoriais a seguir são uma coleção de respostas aqui no Stack Overflow e algumas de minhas próprias experiências com CMake no Microsoft Windows 7/8/10 e Ubuntu 14.04.
Condições prévias
- Você instalou o compilador / IDE e foi capaz de compilar qualquer outro programa uma vez (diretamente sem CMake)
- Você tem a versão mais recente do CMake
- Você tem direitos de acesso na unidade que deseja que o CMake gere seu ambiente de construção
Você tem um diretório de construção limpo (porque o CMake faz o cache das coisas da última tentativa), por exemplo, como um subdiretório de sua árvore de origem
Cmd.exe do Windows
> rmdir /s /q VS2015
> mkdir VS2015
> cd VS2015
Bash shell
$ rm -rf MSYS
$ mkdir MSYS
$ cd MSYS
e certifique-se de que seu shell de comando aponta para o diretório de saída binária recém-criado.
Coisas gerais que você pode / deve tentar
O CMake é capaz de encontrar e rodar com qualquer / seu compilador padrão? Execute sem dar um gerador
> cmake ..
-- Building for: Visual Studio 14 2015
...
Perfeito se determinar corretamente o gerador a ser usado - como aqui Visual Studio 14 2015
O que foi que realmente falhou?
No diretório de saída da compilação anterior, procure CMakeFiles\CMakeError.log
qualquer mensagem de erro que faça sentido para você ou tente abrir / compilar o projeto de teste gerado em CMakeFiles\[Version]\CompilerIdC
| CompilerIdCXX
diretamente da linha de comando (conforme encontrado no log de erros).
CMake não consegue encontrar o Visual Studio
Tente selecionar a versão correta do gerador :
> cmake --help
> cmake -G "Visual Studio 14 2015" ..
Se isso não ajudar, tente definir as variáveis de ambiente do Visual Studio primeiro (o caminho pode variar):
> "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
> cmake ..
ou use o Developer Command Prompt for VS2015
atalho no menu Iniciar do Windows em All Programs
/ Visual Studio 2015
/ Visual Studio Tools
(obrigado em @Antwane pela dica).
Histórico : CMake oferece suporte a todas as versões e sabores do Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate, etc.). Para determinar a localização do compilador, ele usa uma combinação de pesquisa no registro (por exemplo, at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir
), variáveis de ambiente do sistema e - se nenhuma das outras surgiram com algo - simplesmente tente chamar o compilador.
CMake não consegue encontrar GCC (MinGW / MSys)
Você inicia o bash
shell MSys com msys.bat
e apenas tenta chamar diretamentegcc
$ gcc
gcc.exe: fatal error: no input files
compilation terminated.
Aqui ele encontrou gcc
e está reclamando que não dei nenhum parâmetro para trabalhar.
Portanto, o seguinte deve funcionar:
$ cmake -G "MSYS Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
$ make
Se o GCC não foi encontrado, chame export PATH=...
para adicionar o caminho do seu compilador (veja Como definir a variável de ambiente PATH no script CMake? ) E tente novamente.
Se ainda não estiver funcionando, tente definir o CXX
caminho do compilador diretamente exportando-o (o caminho pode variar)
$ export CC=/c/MinGW/bin/gcc.exe
$ export CXX=/c/MinGW/bin/g++.exe
$ cmake -G "MinGW Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
$ mingw32-make
Para obter mais detalhes, consulte Como especificar o novo caminho GCC para CMake
Nota : Ao usar o gerador "MinGW Makefiles", você deve usar o mingw32-make
programa distribuído com MinGW
Ainda não funciona? Isso é estranho. Certifique-se de que o compilador está disponível e possui direitos de execução (consulte também o capítulo de pré-condições acima).
Caso contrário, o último recurso do CMake é não tentar qualquer pesquisa do compilador e definir as variáveis internas do CMake diretamente por
$ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..
Para obter mais detalhes, consulte Cmake não honra -D CMAKE_CXX_COMPILER = g ++ e compilador de configuração de erro Cmake
Alternativamente, essas variáveis também podem ser definidas cmake-gui.exe
no Windows. Veja o Cmake não consegue encontrar o compilador
Plano de fundo : semelhante ao Visual Studio. O CMake suporta todos os tipos de sabores GCC. Ele pesquisa as variáveis de ambiente (CC, CXX, etc.) ou simplesmente tenta chamar o compilador. Além disso, ele irá detectar todos os prefixos (quando compilação cruzada ) e tenta adicioná-lo a todas as binutils do compilador toolchain GNU ( ar
, ranlib
, strip
, ld
, nm
, objdump
, e objcopy
).