我对强大的定义是定制能力。
我对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
- 用于调试 *
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: ???
1.是否有某种gcc <-->msvc编译器选项Map指南?
- gcc选项摘要在每个部分列出了比Compiler Options Listed by Category更多的选项。msvc中缺少了很多重要和有趣的东西。是我缺少了一些东西还是msvc真的没有gcc强大。
3条答案
按热度按时间dfddblmv1#
MSVC是一个IDE,gcc只是一个编译器。CL(MSVC编译器)可以完成你从gcc的Angular 描述的大多数步骤。
CL /?
提供了帮助。例如:
预处理到标准输出:
编译而不链接:
生成程序集(但与gcc不同,这不会阻止编译):
CL
实际上只是一个编译器,如果您想查看IDE为编译和链接生成的命令,最简单的方法是查看IDE中某个项的属性页的命令行部分。但是,CL
不调用单独的预处理器或汇编程序,因此没有单独的命令可供查看。对于
-save-temps
,IDE将执行单独得编译与链接,因此无论如何都会保留目的文件.要保留预处理器输出与汇编器输出,可以通过IDE启用/P
与/Fa
.gcc
和CL
是不同的,但我不会说MSVC缺乏“很多”东西,当然不是你正在寻找的输出。ctehm74n2#
对于等效的-E,cl.exe具有/P(它不会“在预处理阶段后停止”,但它会将预处理程序输出输出到一个文件,这在很大程度上是相同的)。
对于-S,它有点模糊,因为“编译”和“组装”步骤发生在多个地方,这取决于您指定的 other 选项(例如,如果您打开了整个程序优化,那么直到链接阶段才生成机器码)。
对于-v,Visual C与GCC不同。它直接在cl.exe(和link.exe)中执行编译的所有阶段,因此不会显示“已执行的命令”。类似地,对于-save-temps:因为所有操作都直接在cl.exe和link.exe内部进行,所以唯一的“临时”文件是cl.exe生成的.obj文件,并且总是保存这些文件。
但归根结底,GCC是一个开源项目。这意味着任何人都可以添加任何他们喜欢的命令行选项,而阻力相对较小。对于Visual C,一个商业闭源代码产品,每个选项都需要有一个商业案例、设计会议、测试计划等等。
ohtdti5x3#
这 两 个 编译 器 都 有 大量 的 选项 来 修改 ... ... 所有 的 东西 。 我 怀疑 任何 一 个 编译 器 中 没有 的 选项 都 是 一 个 不 值得 做 的 事情 。 大多 数 " 普通 " 用户 都 找 不到 这些 选项 的 用途 。
如果 您 单纯 地 将 可用 选项 的 数量 作为 " 能力 " 或 " 灵活 性 " 的 衡量 标准 , 那么 您 可能 会 发现 gcc 是 赢家 , 这 仅仅 是 因为 gcc 可以 处理 除 Windows 之外 的 许多 平台 , 并且 具有 针对 这些 平台 中 的 许多 平台 的 特定 选项 , 而 这些 选项 在 MSVC 中 显然 是 找 不到 的 。 gcc ( 好 吧 , gcc 工具 链 ) 还 可以 编译 C 和 C + + 之外 的 许多 语言 ;例如 , 我 最近 在 Objective-C 中 使用 了 它 。
编辑 : 我 和 迪恩 一起 质疑 你 的 问题 的 有效 性 。 是 的 , MSVC ( cl ) 有 相当于 gcc 许多 期权 的 期权 , 但 不 , 期权 的 数量 并 没有 多大 意义 。
简 而言 之 : 除非 您 正在 做 一些 非常 特殊 的 事情 , 否则 您 会 发现 MSVC 在 Windows 平台 上 很 容易 " 足够 强大 " , 您 很 可能 不会 错过 任何 gcc 选项 。