我希望能夠向我的實際代碼添加(非常重複的)C/C++代碼,但是在編譯時,代碼可能來自說,python的stdout腳本,就像用宏一樣。使用腳本在編譯時生成代碼
例如,假設我想有依賴於給定類的公共屬性的功能,能像下面在我的C++代碼將是一個祝福:
generate_boring_functions(FooBarClass,"FooBarClass.cpp")
是這樣使用傳統手段可行嗎?或者我必須使用Makefiles和臨時源文件進行破解?
謝謝。
我希望能夠向我的實際代碼添加(非常重複的)C/C++代碼,但是在編譯時,代碼可能來自說,python的stdout腳本,就像用宏一樣。使用腳本在編譯時生成代碼
例如,假設我想有依賴於給定類的公共屬性的功能,能像下面在我的C++代碼將是一個祝福:
generate_boring_functions(FooBarClass,"FooBarClass.cpp")
是這樣使用傳統手段可行嗎?或者我必須使用Makefiles和臨時源文件進行破解?
謝謝。
你很可能需要稍微調整一下Makefile。編寫一個(Python)腳本可以讀取每個源文件作爲額外的預處理步驟,用正確的代碼替換generate_boring_functions
(或任何其他腳本宏)的實例很容易,可能只需用正確的參數調用generate_boring_functions.py
,並通過標準輸入將源發送給編譯器來繞過臨時文件的需要。
該死的,現在我想做出這樣的事情。
編輯:像這樣的規則,卡在一個makefile中,可以用來處理額外的構建步驟。這是未經測試的,並且僅在完整性時才添加。
%.o : %.cpp
python macros.py $< | g++ -x cpp -c - -o [email protected]
makefile(或等價物)是「常規」的意思!
您可以嘗試Boost預處理器庫。它只是常規預處理器的擴展,但如果你有創意,你幾乎可以獲得任何東西。
如果一個makefile文件是不是你足夠的常規,你可以用巧妙的編寫宏度日。
class FooBarClass
{
DEFINE_BORING_METHODS(FooBarClass)
/* interesting functions begin here */
}
我經常看到這樣做來實現COM類的樣板部分。
但是,如果你想要的東西既不是make
也不是宏,那麼我不知道你可能意味着什麼。
+1宏來簡化樣板代碼。 – 2010-06-17 18:33:41
你看過PythoidC嗎?它可以用來生成C代碼。
我從來沒有使用過這種特殊的技術,但它聽起來好像你正在尋找像Ned Batchelder's Cog這樣的工具。
將Python腳本嵌入到C++源文件中,以便在通過齒輪工具運行時爲C++編譯器生成額外的C++代碼以供使用。所以你的構建過程將包含一個額外的步驟,以便在調用C++編譯器之前使cog生成實際的C++源文件。
我以爲Makefiles是常規手段。你有什麼想法? – 2010-06-17 17:26:13
什麼是枯燥的功能?他們是否可以通過基於模板的解決方案來解決問題? – 2010-06-17 17:28:15
不,它不是模板可解的,我知道Makefiles是常規手段,但我只是想通過做簡單的愚蠢簡單的「g ++ foo.cpp -o foo」來工作,我想這太難以問了;) – Manux 2010-06-17 17:39:47