我想在不調用預處理器的情況下運行Microsoft Visual Studio Compiler cl.exe
。這可能嗎?我認爲僅僅編譯預處理源代碼(使用/c
標誌)會使預處理器運行成爲無操作,但顯然情況並非如此。我做了一些基準測試。這裏有一個小的源文件(main.cpp
),它只是包含了一些代碼:如何在兩個單獨的步驟中運行MSVC預處理器和編譯器?
#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的解決方案感興趣。
好奇心:爲什麼?你是否希望以某種方式加快編譯速度?可能值得嘗試編寫PCH的相同實驗,而不是預處理的C++源代碼。 – Rup 2011-01-21 10:16:16
@Rup:我爲MSVC編寫了一個編譯器緩存(很像`ccache`),請參閱http://github.com/frerich/clcache-該程序使用預處理源代碼(除其他外)來確定編譯器/彙編程序需要重新運行,或者以前生成的目標文件是否可以重新使用。在緩存未命中的情況下,我不想重新運行預處理器,而是重新使用爲生成緩存而生成的源代碼。 – 2011-01-21 10:47:48