【发布时间】:2016-01-27 23:57:05
【问题描述】:
我正在使用 Visual Studio 2013 在命令行 (cl.exe) 上编译 c++ 代码。我了解在使用 ide 时,有一个选项可以在发布模式或调试模式下编译。
命令行编译器是否也存在此选项?怎么访问?
我查看了 Microsoft 网站上附加到 cl.exe 的所有选项,但似乎没有一个适合。此外,Microsoft 网站似乎只包含有关如何通过 ide 编译发布的介绍。
【问题讨论】:
我正在使用 Visual Studio 2013 在命令行 (cl.exe) 上编译 c++ 代码。我了解在使用 ide 时,有一个选项可以在发布模式或调试模式下编译。
命令行编译器是否也存在此选项?怎么访问?
我查看了 Microsoft 网站上附加到 cl.exe 的所有选项,但似乎没有一个适合。此外,Microsoft 网站似乎只包含有关如何通过 ide 编译发布的介绍。
【问题讨论】:
您要使用的工具是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++ 编译的方式几乎相同)。我是否需要将我的代码转换为项目才能获得“发布”版本?