假設我有一個插件,我用gcc將其加載-fplugin = foo.so ...gcc的預處理器就知道,如果一個插件已經加載
是否有被定義的任何預處理符號或宏我可以用它來有條件地編譯出插件所需的語言功能。
當然,我可以在命令行上提供該宏,例如-Dplugin_foo_loaded。
但是,如果這樣的宏是通過加載插件的行爲生成的,那將會更好。
答案是?
假設我有一個插件,我用gcc將其加載-fplugin = foo.so ...gcc的預處理器就知道,如果一個插件已經加載
是否有被定義的任何預處理符號或宏我可以用它來有條件地編譯出插件所需的語言功能。
當然,我可以在命令行上提供該宏,例如-Dplugin_foo_loaded。
但是,如果這樣的宏是通過加載插件的行爲生成的,那將會更好。
答案是?
目前(GCC 4.9)你不能這樣做,因爲沒有與預處理器相關的插件鉤子。
我想最簡單的方法是通過-DMYPLUGIN
。或者在你的插件中定義一些內建。
PS。如果您正在尋找一些關於GCC插件的教程資料,請考慮MELT和一些documentation(例如,GCC plugins thru the MELT example; Linux Foundation,2014年3月的幻燈片)
好吧,這是一個恥辱預處理器沒有插件功能。我不確定它是否可以使用與現有插件系統相同的體系結構,但我可以想象它會很有用,特別是對於依賴預處理器的代碼太多。 – user1338 2014-10-30 18:27:50
這只是將一些插件鉤子添加到主幹中的一點。然而,一些有影響力的海合會成員不相信增加他們;你需要向他們展示一些現有的GCC插件,這些插件可以受益於這種鉤子。 – 2014-10-30 18:50:45
爲什麼你問,爲什麼你在意?你的插件試圖做什麼? – 2014-10-30 17:55:29
目前我只是在學習如何使用gcc插件的強大之劍。我不想特別做任何事情(但)。當我認爲這很實際時,我曾經直接攻擊gcc。一旦停止實踐,我放棄了。我只是最近才發現這個功能,所以我正在學習它。而且我知道這個極好的MELT。我自己是個口齒不清的人。但正如我所說,現在只是學習 – user1338 2014-10-30 18:02:21
請嘗試MELT,並使用或許最新的快照。我會盡快發佈下一個版本。隨時與我聯繫,或者最好在'gcc-melt @ googlegroups.com'上詢問任何與MELT相關的問題。 – 2014-10-30 18:12:08