使用cl.exe进行命令行编译?

43

我正在尝试在不使用IDE的情况下使用Visual Studio Express 2010 C++编译器。我发现cl.exe在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin中,但是我遇到了一些困难。首先,在我输入cl时,它会弹出一个警告窗口,提示“程序无法启动,因为您的计算机缺少mspdb100.dll”。

所以我将C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE添加到系统路径中,然后再次尝试,但这次出现以下错误:

致命错误 C1510:无法加载语言资源clui.dll。

您有什么解决方法,以便我可以进行编译?还有如何设置路径,使我可以从不包含cl.exe的解决方案文件夹中直接输入“cl main.cpp”等。目前我必须在bin文件夹内部。谢谢。


8
安装VS时会创建一个带有正确设置的cmd shell快捷方式/菜单项吗? - Mat
1
在VS文件夹中有一个win32_all_vars.bat或者类似的东西,执行它然后再试一次。 - Xeo
@Mat:是的,但那并不是一个优雅的解决方案。 - Daniel Gratz
3
不够优雅?只需点击一次即可设置一个合适的编译环境?……只需查看快捷方式所执行的操作,并以你最喜欢的最“优雅”的方式进行复制即可,不要改变原来的意思。 - Mat
我以为你的意思是每次打开IDE并从那里运行命令行。 - Daniel Gratz
显示剩余2条评论
5个回答

55

尝试从Visual Studio命令提示符中启动

Start->
    All Programs ->
        Microsoft Visual Studio 2010 ->
            Visual Studio Tools ->
                Visual Studio Command Prompt 2010

或者,您可以在命令提示符中运行以下命令来设置环境:

"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
(note: 运行后会保留您的环境设置。)
(note2: 可按需更改x86。选项包括:x86ia64amd64x86_amd64x86_ia64)
从那里,您可以运行cl.exe。如果您希望在每次运行cl时自动执行并撤消此操作,请创建一个批处理文件,其中包含以下内容:
@echo off
%comspec% /c ""c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 && cl.exe %*"

(/c命令提示符告诉命令提示符在运行此命令后结束会话,因此您的环境将返回正常状态。)

从那里开始,将其命名为cl.bat,将其放在某个文件夹中,并将该文件夹的路径添加到您的PATH环境变量中,确保它出现在cl.exe的路径之前,这样每当您键入cl而不是cl.exe时,就会执行此cl.bat

我建议您将cl.bat放在您的system32/文件夹中,这应该位于默认安装的cl.exe的路径之前。

或者,您可以按任何顺序添加它并始终键入cl.bat,或将其命名为其他名称以避免混淆。


6

按照jsvk的建议,只需使用vcvarsall.bat即可:

"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

之后,如果您使用devenv.exe构建自己的内容,可以避免许多头疼问题:

devenv solutionfile.sln /build [ solutionconfig ] [ /project projectnameorfile [ /projectconfig name ] ]

还有很多其他的命令行开关,你可以使用devenv /?进行检查。


6

这是一个相当简单和直接的任务。首先将编译器路径添加到系统路径中:C:\Program Files\Microsoft Visual Studio 10.0\VC\bin; 然后,打开命令提示符并更改目录到您的源文件夹;然后执行vcvars32.bat文件以设置使用x86上的vc ++的环境;之后,您现在可以键入cl来编译您的程序。


5

我安装了多个版本的VS; 我为每个版本创建了一个小的.BAT文件,放在路径中的某个位置,调用相关的“vcvarsall.bat”。 例如,“vc9.bat”调用VS2008的vcvarsall.bat,而“vc10.bat”调用VS2010的vcvarsall.bat。 我可以像往常一样打开普通的命令窗口,输入“vc9”,然后那个命令窗口就准备好使用VS2008进行编译等操作。


这是一个很棒的想法,我不知道为什么我以前没有做过。 - Marcel Valdez Orozco
可以让我们看看您的批处理文件吗?也许是GitHub gist或代码粘贴? - Douglas G. Allen

3
链接器运行时出现内存不足错误。您可以使用x64工具架构的Visual Studio工具。
msbuild命令行:
msbuild myproject.vcxproj /p:PreferredToolArchitecture=x64

或者,更好的方法是将其添加到.vcxproj项目的设置中。
要指定编译器和工具的64位版本,请在Microsoft.Cpp.default.props元素后将以下属性组元素添加到Myproject.vcxproj项目文件中:

<PropertyGroup>  
    <PreferredToolArchitecture>x64</PreferredToolArchitecture>  
</PropertyGroup> 

这些选项将使Visual Studio使用amd64架构文件夹下的工具(根据目标架构):
VC\bin\amd64
VC\bin\amd64_x86
VC\bin\amd64_arm

https://msdn.microsoft.com/en-us/library/dd293607.aspx


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