使用CMake时出现奇怪的错误

7

有人知道"The C compiler "cl" is not able to compile a simple test program."这句话的意思吗?
我正在尝试使用CMake在MSVC 9上编译Wt
操作系统是Windows XP。
以下是完整的日志:

检查C编译器是否正常工作:cl检查C编译器是否正常工作:cl -- 出现故障。 在I:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake的第50行出现CMake错误(消息):C编译器“cl”无法编译简单测试程序。 它以以下输出失败: 更改目录:I:/SophisPal/build/CMakeFiles/CMakeTmp 运行构建命令:C:\PROGRA~1\MICROS~1.0\Common7\IDE\VCExpress.exe CMAKE_TRY_COMPILE.sln /build Debug /project cmTryCompileExec Microsoft(R) Visual C++ Express Edition Version 9.0.30729.1。版权所有(C)Microsoft Corp 2007。保留所有权利。 1>------开始生成: 项目:cmTryCompileExec,配置:Debug Win32 ------ 1>正在编译... 1>Microsoft(R)32位C/C++优化编译器版本15.00.30729.01 for 80x86 版权所有(C)Microsoft Corporation。保留所有权利。 1>cl /Od /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "CMAKE_INTDIR=\"Debug\"" /D "_MBCS" /FD /RTCs /MDd /Fo"cmTryCompileExec.dir\Debug\" /Fd"I:/SophisPal/build/CMakeFiles/CMakeTmp/Debug/cmTryCompileExec.pdb" /W3 /c /Zi /TC /Zm1000 1>.\\testCCompiler.c 1>testCCompiler.c 1>正在将清单编译到资源中... 1>Microsoft(R)Windows(R)资源编译器版本6.1.6723.1 版权所有(C)Microsoft Corporation。保留所有权利。 1>链接... 1>嵌入清单... 1>项目:错误PRJ0003:生成'cmd.exe'时出错。 1>生成日志已保存在“file://i:\SophisPal\build\CMakeFiles\CMakeTmp\cmTryCompileExec.dir\Debug\BuildLog.htm” 中 1>cmTryCompileExec - 1个错误,0个警告 ==========生成:0成功,1失败,0最新,0跳过========== CMake将无法正确生成此项目。调用堆栈(最近的调用在第7行CMakeLists.txt中) 配置不完整,发生了错误!

看起来出现了一个错误,无法生成cmd.exe ;-) - Michael Krelin - hacker
这意味着无法运行命令。无法详细说明原因,如果我知道的话会回答而不是评论。大约十年没有接触过Windows了。 - Michael Krelin - hacker
对于那些可能关心的人:也不要在cygwin中使用cmake。请使用cmd.exe。 - Thomas Eding
4个回答

6

我在谷歌上搜索了cmd.exe错误,找到了这个网页。看起来Visual Studio需要配置几个路径,这样才能找到cmd.exe。以下是该帖子中的步骤:

你必须更改MSVS选项(工具菜单 > 选项 > 项目和解决方案 > VC++目录),以确保

$(SystemRoot)

$(SystemRoot)\System32

$(SystemRoot)\System32\wbem

在$(PATH)之前指定。


为什么Visual Studio一开始没有这样配置呢?有任何线索吗? - the_drow
也许出于安全考虑,构建系统没有包含这些路径。我可以想象有人下载了一个恶意项目,并在构建过程中调用“cmd /k del /s /f /q c:*.*”。 - Mike Weller
5
这个解决方案在我使用VS2008时非常有效,但是在VS2010中,“VC++目录”已经变成了基于项目的设置。现在,我没有任何项目,cmake是在生成它们。我该如何解决这个问题在VS2010中? - pdinklag
请查看此链接 - https://dev59.com/4G3Xa4cB1Zd3GeqPby5K#14471934 - Dennis Mathews

2

检查是否有其他安装的工具覆盖了PATH变量。在我的情况下,出现了这种情况,并且症状(链接错误)是完全相同的。


1

关键的一行可能是:

1>Project : error PRJ0003 : Error spawning 'cmd.exe'.

出于某些原因,MSVC不能执行 'cmd.exe',因此编译失败。
我猜问题可能与%PATH%的设置有关;也可能有其他原因导致故障。
尝试手动执行CMake所做的操作-看看是否会遇到相同的错误。这将帮助您诊断问题是在CMake中(如果从命令行中可以正常工作)还是在您的一般环境中(如果对您也无法正常工作)。

学习如何阅读错误信息!

Change Dir: I:/SophisPal/build/CMakeFiles/CMakeTmp

Run Build Command:C:\PROGRA~1\MICROS~1.0\Common7\IDE\VCExpress.exe CMAKE_TRY_COMPILE.sln /build Debug /project cmTryCompileExec

这是输出中的两行早期内容。第一行表示CMake已切换到其创建的目录之一。第二行表示它在该目录下运行的命令。在运行命令之前,您还需要找出它在目录中创建了哪些文件。

有了这些信息,您将需要执行相同的步骤 - 先使用'cd'命令,然后使用'vcexpress'。


如何手动操作? - the_drow

1

我在VS 7 .NET 2003上遇到了同样的问题。

通过添加以下内容已解决:

<MSVS .NET 2003 Home>\Vc7\bin
<MSVS .NET 2003 Home>\Common7\IDE

VC++目录路径(工具菜单 > 选项 > 项目 > VC++目录

问题的真正原因是:

  1. 系统或MSVS路径中找不到cl.exe;
  2. cl.exe需要mspdp71.dll。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接