这些错误消息
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".
或
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!
只是意味着CMake的是无法找到你的C/CXX编译器编译一个简单的测试程序(的第一件事情之一CMake的尝试,而检测你的构建环境)。
找到问题的步骤取决于您想要生成的构建环境。以下教程是关于StackOverflow的一系列答案,以及我在MS Windows 7/8/10和Ubuntu 14.04上使用CMake的一些经验。
前提
- 您已安装了编译器/ IDE,它是能够一次编译任何其它程序(没有直接的CMake)
- 描述您有最新的CMake version
- 你有你想要的CMake生成构建环境的驱动器上的访问权限
你有一个干净的生成目录(因为CMake会缓存最后一次尝试的东西)eg作为你的源代码树
的Windows CMD.EXE的子目录
> rmdir /s /q VS2015
> mkdir VS2015
> cd VS2015
的Bash shell
$ rm -rf MSYS
$ mkdir MSYS
$ cd MSYS
,并确保您的命令shell点到新创建的二进制输出目录。
一般的东西,你可以/应该尝试
CMake的是能够找到并运行任何/默认的编译器?不给发电机
> cmake ..
-- Building for: Visual Studio 14 2015
...
完美的,如果它正确地确定使用发电机运行 - 喜欢这里Visual Studio 14 2015
那是什么,实际上失败了吗?
在之前的编译输出目录中,查看CMakeFiles\CMakeError.log
,了解对您有意义的任何错误消息,或者尝试打开/编译在CMakeFiles\[Version]\CompilerIdC
处生成的测试项目| CompilerIdCXX
直接从命令行(在错误日志中找到)。
CMake的不能找到的Visual Studio
尽量选择正确的generator version
> cmake --help
> cmake -G "Visual Studio 14 2015" ..
如果不帮尝试设置VS环境变量第一个(路径可能不同)
> "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
> cmake ..
或使用Developer Command Prompt for VS2015
快捷在Windows开始菜单下All Programs
/Visual Studio 2015
/Visual Studio Tools
(感谢在@Antwane的提示)
背景:CMake的不支持所有Visual Studio版本和口味(Express,Community,Professional,Premium,Test,Team,Enterprise,Ultimate,...)。为了确定编译器的位置,它使用搜索注册表的组合(例如,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir
),系统环境变量和 - 如果其他人都没有提出任何问题 - 明显地尝试调用编译器。
CMake的不能找到GCC(MinGW的/ MSys的)
您与msys.bat
启动MSys的bash
壳,只是尝试直接调用gcc
$ gcc
gcc.exe: fatal error: no input files
compilation terminated.
这确实发现gcc
,并抱怨说我没有给它任何参数。
所以下面应该工作:
$ cmake -G "MSYS Makefiles" ..
-- The CXX compiler identification is GNU 4.8.1
...
$ make
如果GCC没有找到电话export PATH=...
添加你的编译路径(见How to set PATH environment variable in CMake script?),然后再试一次。
如果它仍然没有工作,试图直接通过导出其设置的CXX编译器的路径(路径可能会有所不同)
$ 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
欲了解更多详情,请参阅how to specify new gcc path for cmake
注意:当使用“MinGW Makefiles”发电机,你必须使用mingw32-make
程序与MinGW分销
仍然无法正常工作?这很奇怪。请确保编译器在那里,它具有可执行权限(另请参阅上述前提条件)。
否则cmake的最后一招就是不要尝试任何编译器搜索本身并直接设置的CMake的内部变量通过
$ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..
欲了解更多详情,请参见Cmake doesn't honour -D CMAKE_CXX_COMPILER=g++和Cmake error setting compiler
或者这些变量也可以设置通过Windows上的cmake-gui.exe
。见Cmake cannot find compiler
背景:大致相同与Visual Studio。 CMake支持各种GCC风格。它搜索环境变量(CC,CXX,...)或简单地尝试调用编译器。此外,它会检测到任何前缀(当cross-compiling),并试图将其添加到GNU编译器工具链(ar
,ranlib
,strip
,ld
,nm
,objdump
,objcopy
)的所有的binutils。
您可以使用其编译器为Visual Studio配置项目,或使用gcc为Makefiles配置项目。你尝试过什么方法? – Tsyvarev
你输入的cmake命令是什么? – bames53
你使用最新的CMake吗?你使用了什么发电机?你是否从Visual Studio 2015命令提示符运行命令(因此它具有编译器环境变量集)? – drescherjm