2014-03-13 64 views
1
获取GCC选项

我正在开发一个Eclipse插件,其中包括其他必须检查当前C项目中设置的编译器选项。 基本上,我想访问属性 - > C/C++编译 - >设置 - > GCC C编译器 - >所有选项字段。Eclipse CDT从代码

我已经搜索了如何访问它,但我还没有找到办法做到这一点。 我试图通过喜好来存取权限它像下面的代码:

IEclipsePreferences root = Platform.getPreferencesService().getRootNode(); 

我可以使用插件的喜好这种方式,但不与C项目。

有没有人知道一种方法来做到这一点?我不需要更改编译器选项,只需知道设置了哪些标志。

更新:我找到了解决方案。

IResourceInfo info = getResourceInfo(translationUnit, description); 
    ITool tools[] = info.getTools(); 
     for (ITool t : tools) { 
      if (t.getName().compareToIgnoreCase("GCC C Compiler") == 0) { 
       try { 
        //Finally the field I was looking for 
        String commandLine = t.getToolCommandFlagsString(getProject().getFullPath(), null); 

       } catch (BuildException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

我然后可以解析字符串,不理想,但它的工作原理。 我得到了这个职位的getResourceInfo()函数:How do I programmatically change the Eclipse CDT tool settings for a file?

所以,感谢justinmreina的答案!

回答

2

你穿越黑暗和孤独的道路,我的朋友:)。但尽管如此,却是一件有趣的事情。在自定义工具链/工具

这里

设置选项是如果有人试图以编程方式设置GNU工具/工具链的选项的示例:

*和这是同一作者的背景线索解决它:

他做了什么,这里将让你到你的决心。我建议首先浏览org.eclipse.cdt.managedbuild.gnu.ui的plugin.xml。关注工具链,工具及其选项。

寻找GNU C工具链(S)的选项/工具(S)

而且,这里是一个有用的帖子我忍了一段时间回来就“发现在GNU C项目宕选项” 。不是确切的OP的问题,但答案与您的问题有关。

结论

我强烈怀疑你会找到答案< 10行代码,甚至设置 '-v' 标志的编译器...如果你确实找到了一个简单的结果,我建议在这里发布它作为后续。

祝你好运!

编辑:我一直在啃这一段时间,因为我最近偶然发现了它/失败了。以下是如何从代码设置选项。

//assumptions 
//#1 project is [0] in workspace 
//#2 compiler is [2] in workspace 

//get project 
IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject("hello_world"); 

//get <storageModule moduleId="org.eclipse.cdt.core.settings"> 
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(proj); 

//get <storageModule moduleId="cdtBuildSystem"> 
IManagedProject sub_info = info.getManagedProject(); 

//get <configuration name="Debug"> 
IConfiguration config = sub_info.getConfigurations()[0]; 

//get <toolChain> 
IToolChain toolchain = config.getToolChain(); 

//get <tool name="GCC C Compiler"> 
ITool tool = toolchain.getTools()[2]; 

//get <option> 
IOption option = tool.getOptionBySuperClassId("gnu.c.compiler.option.misc.other"); 

//----append new flag----// 
String new_opt_value = option.getValue() + " -mySuperFlag"; 

//-----store it----// 
ManagedBuildManager.setOption(config, tool, option, new_opt_value); 
ManagedBuildManager.saveBuildInfo(proj, true); 

注意 - 一旦你开始观察这个操作,作为“日蚀资源”,该方法为(有点...)明确 - 每个对象调用到访问场只是访问另一个部分在.cproject资源的XML模式内

希望这有助于!

+0

大声笑,这正是10行代码... –