cla*_*aws 9 c c++ gcc visual-c++
我对强大的定义是定制的能力.
我很熟悉gcc我想尝试MSVC.所以,我在msvc中搜索gcc等效选项.我找不到他们中的很多人.
控制输出类型
Stop after the preprocessing stage; do not run the compiler proper.
gcc: -E
msvc: ???
Stop after the stage of compilation proper; do not assemble.
gcc: -S
msvc: ???
Compile or assemble the source files, but do not link.
gcc: -c
msvc:/c
Run Code Online (Sandbox Code Playgroud)
对调试很有用
Print (on standard error output) the commands executed to run the stages of compilation.
gcc: -v
msvc: ???
Store the usual “temporary” intermediate files permanently;
gcc: -save-temps
msvc: ???
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 26
MSVC是一个IDE,gcc只是一个编译器.CL(MSVC编译器)可以从gcc的角度执行您描述的大多数步骤.CL /?给予帮助.
例如
stdout的预处理:
CL /E
Run Code Online (Sandbox Code Playgroud)
编译没有链接:
CL /c
Run Code Online (Sandbox Code Playgroud)
生成程序集(与gcc不同,这不会阻止编译):
CL /Fa
Run Code Online (Sandbox Code Playgroud)
CL实际上只是一个编译器,如果你想看看IDE生成什么命令来编译和链接最简单的事情来查看IDE中项目的属性页面的命令行部分.CL但是,它不会调用单独的预处理程序或汇编程序,因此没有单独的命令可供查看.
因为-save-temps,IDE执行单独的编译和链接,因此无论如何都会保留目标文件.要保留预处理器输出和汇编器输出,您可以启用/P和/Fa通过IDE.
gcc并且CL不同但我不会说MSVC缺乏"很多东西",当然不是你想要的输出.
Dea*_*ing 10
对于-E的等价物,cl.exe具有/ P(它不会"在预处理阶段后停止",但它会将预处理器输出输出到文件,这在很大程度上是相同的).
对于-S,它有点模糊,因为"编译"和"组装"步骤发生在多个地方,具体取决于您指定的其他选项(例如,如果您打开了整个程序优化,则不会生成机器代码直到链接阶段).
对于-v,Visual C++与GCC不同.它直接在cl.exe(和link.exe)中执行编译的所有阶段,因此没有"命令执行"显示.同样对于-save-temps:因为一切都发生在cl.exe和link.exe中,所以唯一的"临时"文件是cl.exe生成的.obj文件,无论如何它们总是被保存.
但最终,GCC是一个开源项目.这意味着任何有痒痒的人都可以添加他们喜欢的命令行选项,但阻力相对较小.对于商业闭源产品Visual C++,每个选项都需要有商业案例,设计会议,测试计划等.每个新功能都以零下100点开头.