那些错误信息
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在检测您的构建环境时首先尝试的操作之一)。
查找问题的步骤取决于要生成的构建环境。以下教程是有关Stack Overflow的答案的集合,以及我自己在Microsoft Windows 7/8/10和Ubuntu 14.04上使用CMake的一些经验。
前提条件
- 您已经安装了编译器/ IDE,它能够一次编译任何其他程序(直接在不使用CMake的情况下)
- 您拥有最新的CMake版本
- 您具有要CMake生成构建环境的驱动器的访问权
您有一个干净的构建目录(因为CMake确实缓存了上次尝试的内容),例如作为源树的子目录
Windows cmd.exe
> rmdir /s /q VS2015
> mkdir VS2015
> cd VS2015
打击壳
$ rm -rf MSYS
$ mkdir MSYS
$ cd MSYS
并确保命令外壳指向您新创建的二进制输出目录。
您可以/应该尝试的一般事项
CMake是否可以使用任何/您的默认编译器查找并运行?在没有发电机的情况下运行
> cmake ..
-- Building for: Visual Studio 14 2015
...
如果正确确定了要使用的发电机,则非常理想-像这里 Visual Studio 14 2015
实际失败了什么?
在先前的生成输出目录中,查找CMakeFiles\CMakeError.log
对您有意义的任何错误消息,或尝试打开/编译在CMakeFiles\[Version]\CompilerIdC
| 生成的测试项目。CompilerIdCXX
直接从命令行(如在错误日志中找到)。
CMake找不到Visual Studio
尝试选择正确的生成器版本:
> cmake --help
> cmake -G "Visual Studio 14 2015" ..
如果这样做没有帮助,请尝试首先设置Visual Studio环境变量(路径可能会有所不同):
> "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 bash
shell,msys.bat
并尝试直接调用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=...
添加您的编译器路径(请参阅如何在CMake脚本中设置PATH环境变量?),然后重试。
如果仍然无法使用,请尝试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
有关更多详细信息,请参见如何为CMake指定新的GCC路径。
注意:使用“ 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不支持-D CMAKE_CXX_COMPILER = g ++和Cmake错误设置编译器
另外,这些变量也可以通过cmake-gui.exe
Windows 设置。请参阅Cmake找不到编译器
背景:与Visual Studio大致相同。CMake支持各种GCC口味。它搜索环境变量(CC,CXX等)或只是尝试调用编译器。此外,它会检测到任何前缀(当交叉编译),并试图将其添加到GNU编译器工具链的所有的binutils( ,ar
,ranlib
,strip
,ld
,nm
,objdump
和objcopy
)。