"cl"不被识别为内部或外部命令

9
在Windows 7上使用“scons”编译时出现以下错误消息:
-----------------------------------------------------------------------------------
'cl' is not recognized as an internal or external command,
operable program or batch file.
scons: *** [out\windows-x86-MD-unicode-vs2008-rel\obj-static\src\featuresets\ada                                      pters\im-history\AddToChatRoomHistoryVisitor.obj] Error 1
scons: building terminated because of errors.
-----------------------------------------------------------------------------------

我已经将路径添加到环境变量中,但仍然遇到了这个问题。
以下是环境变量的PATH信息:
--------------------------------------------------------------------------------------------
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v
1.0\;C:\Program Files\CREDANT\Shield v7.1\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Fil
es\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\TortoiseSVN\bin;C:\Python27;C:\cygwin64\bin
;C:\Python27\scons-2.3.1;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program File
s\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Progra
m Files (x86)\Microsoft Visual Studio 10.0\VC\bin;C:\Python27\Scripts;C:\Program Files (x86)\Microso
ft Visual Studio 10.0\VC\lib;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
--------------------------------------------------------------------------------------------

你的机器上 cl.exe 位于哪里?你肯定已经找到它了吧?并且验证了该位置是否在你的路径中? - Dan
4个回答

5

cl.exe可执行文件的位置未在系统PATH环境变量中。

换句话说,cmd.exe命令行处理器被要求运行cl.exe可执行文件,但找不到它。它可能没有在PATH中或未安装。

我已将路径添加到环境变量中,但仍遇到此问题。

为了测试这一点,打开命令提示符并键入:

cl.exe -?


2

SCons有查找Visual Studio安装位置并检查注册表和默认安装位置的逻辑,以设置Visual Studio工具所需的路径和其他环境变量。

如果该过程失败,请生成一个调试日志并将其粘贴到某个位置供我们查看。

使用:

set SCONS_MSCOMMON_DEBUG=%TEMP%\SCONS_MSVS_DEBUG.log

然后在同一个shell中运行scons。日志将会在

%TEMP%\SCONS_MSVS_DEBUG.log

您也可以尝试最新版本的SCons 2.4.1,因为我注意到后续版本中对MSVS/MSVC进行了一些修复。但理论上2.3.1应该能找到Visual Studio 2010。


1
好奇为什么是-1?这里有什么误解吗? - bdbaddog

1

只需在Windows搜索中查找cl.exe,并将该路径添加到PATH变量中,保存。在执行cl.exe之前,请关闭现有的打开命令并重新打开它。希望这能起作用。


不正确。SCons无法从shell中获取PATH。这在一定程度上解释了原因。https://bitbucket.org/scons/scons/wiki/FrequentlyAskedQuestions#markdown-header-why-doesnt-scons-find-my-compilerlinkeretc-i-can-execute-it-just-fine-from-the-command-line 但对于Visual Studio,有逻辑来查找注册表以找到安装位置。 - bdbaddog
此外,MSVC期望其他环境变量被定义以正常工作。 - bdbaddog

0
我也遇到了同样的问题,从@bdbaddog的答案中找到了更好的解决方法。使用set SCONS_MSCOMMON_DEBUG=%TEMP%\SCONS_MSVS_DEBUG.log指令获取调试日志后,SCons好像就可以找到cl.exe了。
00073ms:MSCommon/vc.py:_check_cl_exists_in_vc_dir#588:checking for cl.exe at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\bin\Hostx64\x64\cl.exe: 
00073ms:MSCommon/vc.py:_check_cl_exists_in_vc_dir#590:found cl.exe!: 

而且scons env env['ENV']['PATH']cl.exe路径,但它没有使用它,所以我只是使用scons path更新了会话路径,如下所示,然后它就可以工作了

os.environ['PATH'] = env['ENV']['PATH']

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