当前位置: 首页 > 知识库问答 >
问题:

Eclipse CDT从代码中获取GCC选项

劳昊明
2023-03-14

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

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

    IEclipsePreferences root = Platform.getPreferencesService().getRootNode();
    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的回答!

共有1个答案

穆景辉
2023-03-14
    null
    null

另外,这是一个有用的帖子,我在一个GNU C项目中找到dang选项。不是OP的问题,但答案与你的问题相关。

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

祝你好运!

编辑:我已经苦苦思索了一段时间了,因为我最近在这个问题上跌跌撞撞/失败了。下面是如何从代码中设置选项。

//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资源”,方法就变成了(有点...)clear-每个访问字段的对象调用都只是访问.cproject资源的XML模式中的另一个部分

希望这有帮助!

 类似资料:
  • 问题内容: 我在Java应用程序中使用该类,并且需要能够获取HTTP状态代码。如果使用它,则可以在其中看到HTTP状态代码。我还有其他功能可以获取int或String的HTTP状态代码吗? 谢谢一群! 问题答案: 使用,它返回一个包含状态码,协议版本和“原因”的对象。

  • 当Android设备连接到wifi AP时,它会用如下名称来标识自己: android_cc1dec12345e6054 如何从 Android 应用中获取该字符串?不是为了改变它,只是为了读出。 编辑: 这是我的路由器Web界面的屏幕截图,显示了所有已连接设备的列表。请注意列表中的两个Android设备 - 如何从设备上运行的Java代码中读取该字符串?

  • 我们采用GitLab作为项目代码释放平台,所有仓库源码及更新获取都需通过GitLab同步。 gitlab代码入口为:https://gitlab.com/nationalchip/vsp_sdk 一、注册GitLab账号 GitLab登录链接 GitLab账号注册可能需要翻墙,所以不能打开注册链接的,我们建议通过GitHab账号登录。 GitHub注册链接 没有GitHub账号的话,先通过下面链接

  • 参考快速上手指南的代码获取章节: gitlab代码获取章节

  • 有两种途径获取: 代码托管到阿里云[https://code.aliyun.com/]上,需要去注册一个账号,把账号告知我们的FAE,我们给你释放 pull code 的权限。

  • 问题内容: 如何从网站获取HTML代码,进行保存并通过LINQ表达式查找一些文本? 我正在使用以下代码来获取网页的来源: 如何在网页源中的div中查找文本? 问题答案: 从网站获取HTML代码。您可以使用这样的代码。 这将为您提供从网站返回的 HTML 代码。但是通过 LINQ 查找文本并不是那么容易。也许使用正则表达式会更好,但不能与 HTML 代码一起很好地使用