[英]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.