Eclipse CDT从代码获取GCC选项



我正在使用Eclipse插件,其中必须检查当前C项目中设置哪些编译器选项。基本上,我想访问属性 -> c/c 构建 ->设置 -> GCC C Compiler->所有选项字段。

我搜索了如何访问它,但是我还没有找到一种方法。我试图通过以下代码中的偏好进行操作:

    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()函数:如何编程更改文件的Eclipse CDT工具设置?

所以,谢谢Justinmreina的答案!

您的朋友,您沿着黑暗而孤独的道路穿越:)。但是一个有趣的一个。

自定义工具链上的设置选项

这是一个示例,有人试图编程设置GNU工具/工具链的选项:

  • 堆栈溢出:如何以编程方式更改文件的Eclipse CDT工具设置?

*,这是同一作者的解决方案的背景线程:

  • Eclipse论坛:如何以编程方式更改文件的Eclipse CDT工具设置?

他在这里所做的将使您达成解决方案。我建议先浏览org.eclipse.cdt.managedbuild.gnu.ui的插件。专注于工具链,工具及其选项。

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

此外,这是我一段时间以来回到"在GNU C项目中找到Dang选项"的有用文章。不是确切的OP的问题,而是答案与您的问题有关。

  • 堆栈溢出:Eclipse CDT新项目模板 - 如何添加库

结论

我非常怀疑您会找到一个答案< 10行代码,甚至为编译器设置" -v"标志...如果您找到一个简单的结果,我建议将其发布在此处后续。

好运!

edit :我已经对此感到不安了一段时间,因为我最近偶然发现/失败了。这是从代码设置选项的方法。

//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架构中的另一部分

希望这会有所帮助!

最新更新