EclipseCDT从代码中获取GCC选项

EclipseCDT从代码中获取GCC选项,gcc,eclipse-plugin,eclipse-cdt,Gcc,Eclipse Plugin,Eclipse Cdt,我正在开发一个Eclipse插件,它必须检查当前C项目中设置了哪些编译器选项。 基本上,我想访问属性->C/C++构建->设置->GCC编译器->所有选项字段 我已经搜索了如何访问它,但还没有找到一种方法。 我试图通过以下代码中的首选项访问它: IEclipsePreferences root = Platform.getPreferencesService().getRootNode(); 我可以通过这种方式访问插件的首选项,但不能访问C项目的首选项 有人知道怎么做吗?我不需要更改编

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

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

    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()函数:


所以,谢谢贾斯汀雷娜的回答

我的朋友,你走过了一条黑暗而孤独的道路。不过,这是一个有趣的故事

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

下面是一个示例,其中有人试图以编程方式设置GNU工具/工具链的选项:

*这是同一位作者关于解决这个问题的背景线索:

他在这里的所作所为会让你下决心的。不过,我建议先浏览org.eclipse.cdt.managedbuild.gnu.ui的plugin.xml。关注工具链、工具及其选项

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

另外,这里有一篇关于“在GNUC项目中寻找危险选项”的有用帖子。不是确切的OP的问题,但答案与您的问题相关

结论

我很怀疑你能找到答案
//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);