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

Fre*_*abe 9 c++ visual-c++ c-preprocessor

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

#include <iostream>
#include <string>
#include <windows.h>
Run Code Online (Sandbox Code Playgroud)

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

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的解决方案很感兴趣.

Goz*_*Goz 3

据我所知,没有预处理器就无法运行编译器(尽管它不执行任何操作)。

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

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