2011-12-01 19 views
0

我有一個C++程序,其處理的輸入文件。我想爲我的程序添加預處理功能。這是說,輸入文件的樣子:添加C/C++等前處理能力到程序

%pre-processing section 
#include <some_parent_file> 
#define x y 
#ifdef 0 
some useless text 
#endif 

%actual file-contents 
... lots of text ... 

然後我的程序會自動包括父文件中的文本,做的#define的東西,並進行其他預處理。我可以在調用我的程序之前使用腳本(使用g ++ -E),但是我希望能夠在我的程序中執行此操作,因爲這樣可以提供更大的靈活性。

當「實際文件內容」部分中的行以散列開頭時,「g ++ -E」將假定預處理器指令(g ++ -E不知道我想將我的代碼分成兩部分!)。此外,如果我可以使用只是「實際文件內容」部分中的ifdef功能,那將是驚人的。

我可以嵌入我的程序只使用我想要的功能從gcc編譯器的預處理能力範圍內的C++代碼?

+0

您有具體問題嗎? –

+1

只要你的程序fork一個進程在提供的文件上運行g ++ -E,並處理結果。 –

+1

只要你在宏中不太瘋狂,它看起來相當簡單。你有什麼問題? –

回答

1

一個簡單的可能性是使用popen從命令管,其可以是cpp(或gcc -C -E)或m4閱讀。

相關的可能性是將一個腳本編譯器嵌入到您的程序中,例如, lua。一個相關的解決方案是讓你的應用程序中嵌入一個解釋PythonOcaml

最後,您可以使用普通的lexingparsing技術,或許與ANTLR一起處理您的include指令。您也可以使用庫來配置文件,如libconfig

+0

目標是不使用SCRIPCH並且不用C++編寫SCRATCH的所有東西,因爲這是gcc編譯器已經可以做的事情(我不想檢查包含路徑等)。 基本上,有一個方法中C++來做到這一點(使用系統調用或這樣),讓我僅使用我所需要的預處理的功能。 – Karan

+2

當運行**你的應用程序(除非你通過'popen'或'system'或'execve'調用它),** GCC編譯器**是**不涉及**。它只用於構建可執行文件... –

2

如何使用類似Wavecpplib的庫?

+0

Wave似乎是一個不錯的選擇,將會試試 – Karan

+2

Wave現在是一個Boost庫:http://www.boost.org/doc/libs/release/libs/波/ –

-1

如果你想在編譯時開啓/關閉功能,最好是堅持標準預處理宏或者使用模板。您還可以看看Qt如何解析標準C++代碼以生成其他代碼。在運行時,您可以通過腳本或者插件系統來實現。