2014-10-30 63 views
1

假设我有一个插件,我用gcc将其加载-fplugin = foo.so ...gcc的预处理器就知道,如果一个插件已经加载

是否有被定义的任何预处理符号或宏我可以用它来有条件地编译出插件所需的语言功能。

当然,我可以在命令行上提供该宏,例如-Dplugin_foo_loaded。

但是,如果这样的宏是通过加载插件的行为生成的,那将会更好。

答案是?

+0

为什么你问,为什么你在意?你的插件试图做什么? – 2014-10-30 17:55:29

+0

目前我只是在学习如何使用gcc插件的强大之剑。我不想特别做任何事情(但)。当我认为这很实际时,我曾经直接攻击gcc。一旦停止实践,我放弃了。我只是最近才发现这个功能,所以我正在学习它。而且我知道这个极好的MELT。我自己是个口齿不清的人。但正如我所说,现在只是学习 – user1338 2014-10-30 18:02:21

+0

请尝试MELT,并使用或许最新的快照。我会尽快发布下一个版本。随时与我联系,或者最好在'gcc-melt @ googlegroups.com'上询问任何与MELT相关的问题。 – 2014-10-30 18:12:08

回答

0

目前(GCC 4.9)你不能这样做,因为没有与预处理器相关的插件钩子。

我想最简单的方法是通过-DMYPLUGIN。或者在你的插件中定义一些内建。

PS。如果您正在寻找一些关于GCC插件的教程资料,请考虑MELT和一些documentation(例如,GCC plugins thru the MELT example; Linux Foundation,2014年3月的幻灯片)

+0

好吧,这是一个耻辱预处理器没有插件功能。我不确定它是否可以使用与现有插件系统相同的体系结构,但我可以想象它会很有用,特别是对于依赖预处理器的代码太多。 – user1338 2014-10-30 18:27:50

+0

这只是将一些插件钩子添加到主干中的一点。然而,一些有影响力的海合会成员不相信增加他们;你需要向他们展示一些现有的GCC插件,这些插件可以受益于这种钩子。 – 2014-10-30 18:50:45

相关问题