繁体   English   中英

如何在两个单独的步骤中运行MSVC预处理器和编译器?

[英]How can I run the MSVC preprocessor and compiler in two separate steps?

我想在不调用预处理器的情况下运行Microsoft Visual Studio Compiler cl.exe 这可能吗? 我认为简单地编译预处理的源代码(使用/c标志)会使预处理器运行成为无操作,但显然情况并非如此。 我做了一些基准测试。 这是一个小源文件( main.cpp ), main.cpp包含一些代码:

#include <iostream>
#include <string>
#include <windows.h>

以下是一些不同的编译器调用及其时序:

1: cl /c main.cpp                             ~1.02s
2: cl /EP main.cpp > main-preprocessed.cpp    ~0.5s
3: cl /c main-preprocessed.cpp                ~0.75s

似乎编译预处理的源代码已经快一点了(预处理器不需要做任何事情)。 但是,1和2之间的差异表明实际的编译器和汇编器只需要0.5s。 因此,编译预处理的源代码(如步骤3中所做的那样)比我希望的要慢一些。

有没有办法只运行编译器和汇编器,而无需调用预处理器? 我对MSVC6到MSVC10的解决方案很感兴趣。

据我所知,没有预处理器就无法运行编译器(无论它什么都不做。

但是,当您添加写入文件然后回读该文件时,分离2个阶段显然会更慢。 如果它不需要进行这些写操作,它可以将其保存在内存中,您可以节省大量时间,等待磁盘写入和读取。

即使你可以禁用预处理器,它仍然比同时运行两个阶段慢。

很可能你认为预处理器花费的时间实际上是将大文件写入磁盘所花费的时间。 预处理器实际上应该占用编译器其余部分所占时间的一小部分。 正常预/编译的一大好处是编译器可以在预处理器阶段仍在运行时开始编译,可能在单独的线程中或者在检测到新的预处理器输出时。 大型预处理器输出可能不需要占用内存(更不用说磁盘),因为它在较小的块中被消耗和覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM