在命令行键入“cl”时出现不是内部或外部命令,也不是可运行的程序或批处理文件的问题。
2017-02-20 16:01
615 查看
本人采用Visual Studio 2010编译器编译代码,根据书上给出命令测试,结果出现“在命令行键入“cl”时出现不是内部或外部命令,也不是可运行的程序或批处理文件的问题。”百度后得到解决方法并且有所拓展。
在windows操作系统中,打开命令行,输入cl,若系统提示
'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件。
则说明VS没有安装或者环境变量设置不正确,可以按照如下步骤设置:
1. 确保已经安装VS,并在控制台 中键入set
检查是否有类似如下格式的环境变量VSXXCOMNTOOLS
VS90COMNTOOLS=D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
其中XX与VS版本有关:
a) VS2003对应 VS71COMNTOOLS
b) VS2005对应VS80COMNTOOLS
c) VS2008对应VS90COMNTOOLS
如果没有则执行步骤2;否则执行步骤3
2. 在我的电脑>属性>高级>环境变量>系统变量 中新建一个环静变量
变量名: VSXXCOMNTOOLS
变量值: VS安装目录\Common7\Tools\
重复执行步骤1
3. 在控制台中键入
>call "%VS90COMNTOOLS%"vsvars32.bat <==设置cl运行时的一些环境变量
>cl
确保没有提示出错;否则重复步骤1
注意:用set设置环境变量,只能保证在本命令行中生效,命令行窗口一旦关闭,设置就失效了。要想设置也作用于其他命令行窗口,通过我的电脑->环境变量来设置
cl使用简介
cl有很多选项,请通过cl /?获取完整列表。这里列出了一些最重要的选项(选项的前缀可以是'-'或'/'),并且有例子。
无选项
>cl foo.c bar.c <==编译出foo.obj,bar.obj并自动调用链接器link链接得到foo.exe
/c 只编译不链接
>cl /c foo.c bar.c <==编译出foo.obj,bar.obj,但不调用链接器
/link <lib> 指定要链接的Library
>cl /link kernel32.lib foo.c <==编译出foo.obj,并链接kernel32.lib,得到foo.exe
/I <dir> 把目录加入include搜录路径中
/D<name>{=|#}<text> 定义预处理器
>cl /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE <==定义2个预处理器
cl常用选项
/c 只编译不链接
/O2 设定速度最优化
/W3 设定警告等级3
cl相关解释
关于CRT的更多解释
如何禁止警告4996
/D_CRT_SECURE_NO_DEPRECATE 关闭warning:4996(表示strcpy不安全的warning等)
/D_CRT_NONSTDC_NO_DEPRECATE 非标准C也关闭warning:4996
/MD 更多关于CRT的解释
link使用简介
link有很多选项,完整列表见http://msdn.microsoft.com/zh-tw/library/y0zzbyt4.aspx,下面仅列出一些常用选项
[/debug] 产生调试信息
link /out:main.exe main.obj <==链接main.obj并生成main.exe
[/pdb:<target>] 产生调试符号文件
link /debug /out:main.exe main.obj <==链接main.obj并生成带有调试信息的main.exe
[/out:<target>] 指定输出文件
link /debug /pdb:main.pdb /out:main.exe main.obj <==链接main.obj并生成带有调试信息的main.exe以及调试符号文件main.pdb
[/subsystem:<target>] 指定子系统http://msdn.microsoft.com/zh-cn/library/fcc1zstk.aspx
link /subsystem:windows /out:main.exe main.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib <== 编译windows程序,入口函数自动设为WinMain,其中kernel32.lib,...,odbccp32.lib等为windows程序必须链接的lib
[/libpath:<dir>] 把目录加入lib搜索路径中。如果有多个路径,则要写多次/libpath
link /libpath:../common /out:main.exe main.obj lua.lib <== 链接../common中的lua.lib
值得注意的是:
如果同时提供main和WinMain,那么必须手工指定/subsystem
如果只提供main,则链接器自动指定/subsystem:console
应用实例
通常我们把cl和link分开使用:下面是编译lua的一段脚本
cl /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DLUA_BUILD_AS_DLL l*.c
del lua.obj luac.obj <==上述cl编译所有的l*.c,而lua.obj和luac.obj是不需要link的,所以删除之
link /DLL /out:lua51.dll l*.obj
转自:windows
控制台下运行cl命令
在windows操作系统中,打开命令行,输入cl,若系统提示
'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件。
则说明VS没有安装或者环境变量设置不正确,可以按照如下步骤设置:
1. 确保已经安装VS,并在控制台 中键入set
检查是否有类似如下格式的环境变量VSXXCOMNTOOLS
VS90COMNTOOLS=D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
其中XX与VS版本有关:
a) VS2003对应 VS71COMNTOOLS
b) VS2005对应VS80COMNTOOLS
c) VS2008对应VS90COMNTOOLS
如果没有则执行步骤2;否则执行步骤3
2. 在我的电脑>属性>高级>环境变量>系统变量 中新建一个环静变量
变量名: VSXXCOMNTOOLS
变量值: VS安装目录\Common7\Tools\
重复执行步骤1
3. 在控制台中键入
>call "%VS90COMNTOOLS%"vsvars32.bat <==设置cl运行时的一些环境变量
>cl
确保没有提示出错;否则重复步骤1
注意:用set设置环境变量,只能保证在本命令行中生效,命令行窗口一旦关闭,设置就失效了。要想设置也作用于其他命令行窗口,通过我的电脑->环境变量来设置
cl使用简介
cl有很多选项,请通过cl /?获取完整列表。这里列出了一些最重要的选项(选项的前缀可以是'-'或'/'),并且有例子。
无选项
>cl foo.c bar.c <==编译出foo.obj,bar.obj并自动调用链接器link链接得到foo.exe
/c 只编译不链接
>cl /c foo.c bar.c <==编译出foo.obj,bar.obj,但不调用链接器
/link <lib> 指定要链接的Library
>cl /link kernel32.lib foo.c <==编译出foo.obj,并链接kernel32.lib,得到foo.exe
/I <dir> 把目录加入include搜录路径中
/D<name>{=|#}<text> 定义预处理器
>cl /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE <==定义2个预处理器
cl常用选项
/c 只编译不链接
/O2 设定速度最优化
/W3 设定警告等级3
cl相关解释
关于CRT的更多解释
如何禁止警告4996
/D_CRT_SECURE_NO_DEPRECATE 关闭warning:4996(表示strcpy不安全的warning等)
/D_CRT_NONSTDC_NO_DEPRECATE 非标准C也关闭warning:4996
/MD 更多关于CRT的解释
link使用简介
link有很多选项,完整列表见http://msdn.microsoft.com/zh-tw/library/y0zzbyt4.aspx,下面仅列出一些常用选项
[/debug] 产生调试信息
link /out:main.exe main.obj <==链接main.obj并生成main.exe
[/pdb:<target>] 产生调试符号文件
link /debug /out:main.exe main.obj <==链接main.obj并生成带有调试信息的main.exe
[/out:<target>] 指定输出文件
link /debug /pdb:main.pdb /out:main.exe main.obj <==链接main.obj并生成带有调试信息的main.exe以及调试符号文件main.pdb
[/subsystem:<target>] 指定子系统http://msdn.microsoft.com/zh-cn/library/fcc1zstk.aspx
link /subsystem:windows /out:main.exe main.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib <== 编译windows程序,入口函数自动设为WinMain,其中kernel32.lib,...,odbccp32.lib等为windows程序必须链接的lib
[/libpath:<dir>] 把目录加入lib搜索路径中。如果有多个路径,则要写多次/libpath
link /libpath:../common /out:main.exe main.obj lua.lib <== 链接../common中的lua.lib
值得注意的是:
如果同时提供main和WinMain,那么必须手工指定/subsystem
如果只提供main,则链接器自动指定/subsystem:console
应用实例
通常我们把cl和link分开使用:下面是编译lua的一段脚本
cl /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DLUA_BUILD_AS_DLL l*.c
del lua.obj luac.obj <==上述cl编译所有的l*.c,而lua.obj和luac.obj是不需要link的,所以删除之
link /DLL /out:lua51.dll l*.obj
转自:windows
控制台下运行cl命令
相关文章推荐
- 解决打开Android SDK Manager时出现“.....\sdk\tools\lib\\find_java.exe不是内部或外部命令,也不是可运行的程序或批处理文件“问题
- cmd 中键入netstat,net等出现不是内部或外部命令,也不是可运行的程序或批处理文件
- 解决svnserve --version输入后出现的不是内部或外部命令,也不是可运行的程序或批处理文件的问题
- 【解决问题】windows下配置Boost提示'cl' 不是内部或外部命令,也不是可运行的程序 或批处理文件
- 【解决问题】windows下配置Boost提示'cl' 不是内部或外部命令,也不是可运行的程序 或批处理文件
- Windows命令行报错:'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件
- 解决jdk环境变量设置完后,在cmd中运行javac出现’javac‘不是内部或外部命令,也不是可运行的程序或批处理文件的错误提示
- 系统cmd命令提示符出现“不是内部或外部命令,也不是可运行的程序或批处理文件”
- python 命令行:help(),'more'不是内部或外部命令,也不是可运行的程序或批处理文件
- 使用笔记本分享热点点击命令出现,“netsh”不是内部或外部命令,也不是可运行的程序或批处理文件解决办法
- 命令行中提示"THEANO_FLAGS"不是内部或外部命令,也不是可运行的程序或批处理文件
- 出现'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件
- 图文详解win10/8.1/7系统cmd命令提示符出现“不是内部或外部命令,也不是可运行的程序或批处理文件”
- win7下出现'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方法
- win7下出现'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方法
- 如何解决在cmd中出现的:“cmd不是内部或外部命令,也不是可运行的程序或批处理文件”。
- netbeans出现apache-maven-3.3.3\bin\mvn.bat"' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- win7下搭建node.js环境,并解决expressexpress不是内部或外部命令,也不是可运行的程序或批处理文件的问题
- win7下出现'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方法
- windows cmd下输入命令,提示“不是内部或外部命令,也不是可运行的程序或批处理文件”的问题