【问题标题】:Eclipse CDT get GCC options from codeEclipse CDT 从代码中获取 GCC 选项
【发布时间】:2014-03-21 17:08:22
【问题描述】:

我正在开发一个 Eclipse 插件,它必须检查当前 C 项目中设置了哪些编译器选项。 基本上,我想访问 Properties -> C/C++ Build -> Settings -> GCC C Compiler -> All options 字段。

我已经搜索了如何访问它,但我还没有找到方法。 我尝试通过以下代码中的首选项访问它:

    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 的回答!

【问题讨论】:

    标签: gcc eclipse-plugin eclipse-cdt


    【解决方案1】:

    我的朋友,你正走在一条黑暗而孤独的道路上:)。不过很有趣。

    在自定义工具链/工具上设置选项

    这是一个尝试以编程方式设置 GNU 工具/工具链选项的示例:

    *这里是同一作者的后台线程解决它:

    他在这里所做的会让你得到你的决心。我建议先浏览 org.eclipse.cdt.managedbuild.gnu.ui 的 plugin.xml。专注于工具链、工具及其选项。

    查找 GNU C 工具链/工具的选项

    另外,这是我不久前发表的一篇有用的帖子,主题是“在 GNU C 项目中查找 dang 选项”。不是确切的 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);
    

    注意事项 - 一旦您开始将此操作视为“Eclipse 资源”,该方法就变得(有点……)清晰了 - 每个对象调用来访问一个字段只是访问 .cproject 资源的 XML 模式中的另一个部分

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2012-01-18
      • 2013-12-27
      • 1970-01-01
      相关资源
      最近更新 更多