簡體   English   中英

stdin作為MSVC的輸入文件

[英]stdin as input file for MSVC

我有一個自定義工具,我希望在預處理和編譯之間作為編譯過程的一部分運行。 對於GCC,我這樣做:

gcc [options] -E source.c | mytool | gcc [options] -c source.o -xc -

但是,我還沒弄清楚如何為MSVC做類似的事情。 目前我有

cl.exe [options] /EP source.c | mytool.exe > temp.c
cl.exe [options] /c temp.c

這里的問題是,對於每個源文件(數千),我有一個額外的磁盤寫/讀周期。 此外,當MSVC輸出.i文件時,它們往往變得非常大。 超過10MB大。 因此,每個文件的10MB磁盤I / O堆積起來非常快。

所以,我的問題:

1)是否可以讓cl.exe讀取將stdin視為輸入文件?

2)如果沒有,是否可以創建一個可以讀取的內存映射文件?

3)有更好的方法嗎?

不,“獲得SSD”和“不使用MSVC”是無效的答案,對不起。

相關(但沒有解決速度問題)

供將來參考:我發現無法欺騙cl.exe從內存而不是磁盤讀取。

但是,通過在第一階段使用GNU CPP,然后使用cl.exe進行編譯,我設法將進程加速到可接受的速度。 所以:

cpp.exe [options] source.c | mytool.exe > temp.c
cl.exe [options] temp.c

cpp.exe生成的文件比cl.exe /E小5-10倍。 訣竅就是讓它定義_MSC_VER和類似而不是__GNUC__ 我這樣做是通過使用-undef選項去除所有內容,然后手動定義MSFT特定的。 我可能會考慮使用clang作為CPP,因為它可以模仿MSVC。

CPP使#pragma指令保持不變,因此兼容性沒有問題。


我現在達到了一個性能點,其中一個進程的產生對整個構建時間有顯着影響,所以我正在考慮將預處理器編譯到mytool.exe

在Visual Studio 2010中,在Propererty頁面下的Configuration Properties,“Custom Build Step”部分。 試試這一節。

還可以在Internet上搜索“MSDN Visual Studio自定義構建”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM