使用命令行在 Visual Studio 中编译为发行版

Posted

技术标签:

【中文标题】使用命令行在 Visual Studio 中编译为发行版【英文标题】:Compile as release in visual studio using command line 【发布时间】:2016-01-27 23:57:05 【问题描述】:

我正在使用 Visual Studio 2013 在命令行 (cl.exe) 上编译 c++ 代码。我了解在使用 ide 时,有一个选项可以在发布模式或调试模式下编译。

命令行编译器是否也存在此选项?怎么访问?

我查看了 Microsoft 网站上附加到 cl.exe 的所有选项,但似乎没有一个适合。此外,Microsoft 网站似乎只包含有关如何通过 ide 编译发布的介绍。

【问题讨论】:

【参考方案1】:

您要使用的工具是MSBuild.exe

在开发人员命令提示符下,为所有选项运行 msbuild /?

例子:

MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release
MSBuild MyApp.csproj /t:Clean /p:Configuration=Debug;TargetFrameworkVersion=v3.5

如果您想使用 cl.exe/link.exe 执行此操作,则有一个很大的“取决于”您想要的开关。如果您追求纯默认设置,它仍然可能取决于您的项目在 Visual Studio 中的外观。一个简单的方法是在 VS 中创建一个简单的项目,查看 Configuration Properties 的项目属性并查看每个项目的 Command Line。或通过cl /?link /? 寻求帮助

对于一个可能的基本项目:

发布:

/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /Fd"Release\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MD /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\ConsoleApplication2.pch" 

调试:

/GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /Fd"Debug\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\ConsoleApplication2.pch" 

如您所见,有很多选择,没有单一的答案,但是 Release 构建的最大区别是 /D "NDEBUG"/O2

【讨论】:

看来msbuild 是针对项目的。我一直在编译源代码cl main.cpp(与我在 Linux 发行版上使用 g++ 编译的方式几乎相同)。我是否需要将我的代码转换为项目才能获得“发布”版本? 为 cl.exe 添加了一些信息。 我尝试通过 RELEASE 模式编译,但是,我能够调试我的代码。有什么方法可以从二进制文件中去除调试符号?

以上是关于使用命令行在 Visual Studio 中编译为发行版的主要内容,如果未能解决你的问题,请参考以下文章

通过命令行在 Visual Studio 中编译单个独立文件

Visual Studio Code更改语言

使用 Visual Studio 2010 将 libexif 编译为静态库 - 然后从 Visual C++ 项目链接

Visual Studio 怎么反汇编

有啥方法可以直接从命令行查看可用于 Visual Studio 的 Nuget 包源

使用 Visual Studio 2017 将 .NET Core 应用程序编译为 EXE 文件