Eclipse CDT从代码中获取GCC选项

时间:2014-03-13 10:46:02

标签: gcc eclipse-plugin eclipse-cdt

我正在开发一个Eclipse插件,除此之外还必须检查当前C项目中设置了哪些编译器选项。 基本上,我想访问属性 - > C / C ++ Build - >设置 - > GCC C编译器 - >所有选项字段。

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

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

1 个答案:

答案 0 :(得分:2)

你在一条黑暗而寂寞的道路上行走,我的朋友:)。但仍然很有趣。

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

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

*和以下是同一作者的解决方案后台主题:

他在这里所做的将会帮助你解决问题。我建议首先浏览org.eclipse.cdt.managedbuild.gnu.ui的plugin.xml。专注于工具链,工具及其选项。

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

此外,这是一篇有用的文章,我在“GNU C项目”中找到了dang选项。不是OP的确切问题,但答案与您的问题相关。

<强>结论

我强烈怀疑你是否会找到答案&lt; 10行代码,甚至可以设置&#39; -v&#39;编译器的标志...如果您确实找到了一个简单的结果,我建议将其作为后续内容发布在此处。

祝你好运!

编辑:我现在已经咀嚼了一段时间,因为我最近绊倒/失败了。以下是如何从代码中设置选项。

//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模式中的另一个部分

希望这有帮助!