EclipseCDT从代码中获取GCC选项
我正在开发一个Eclipse插件,它必须检查当前C项目中设置了哪些编译器选项。 基本上,我想访问属性->C/C++构建->设置->GCC编译器->所有选项字段 我已经搜索了如何访问它,但还没有找到一种方法。 我试图通过以下代码中的首选项访问它:EclipseCDT从代码中获取GCC选项,gcc,eclipse-plugin,eclipse-cdt,Gcc,Eclipse Plugin,Eclipse Cdt,我正在开发一个Eclipse插件,它必须检查当前C项目中设置了哪些编译器选项。 基本上,我想访问属性->C/C++构建->设置->GCC编译器->所有选项字段 我已经搜索了如何访问它,但还没有找到一种方法。 我试图通过以下代码中的首选项访问它: IEclipsePreferences root = Platform.getPreferencesService().getRootNode(); 我可以通过这种方式访问插件的首选项,但不能访问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()函数:
所以,谢谢贾斯汀雷娜的回答 我的朋友,你走过了一条黑暗而孤独的道路。不过,这是一个有趣的故事 在自定义工具链/工具上设置选项 下面是一个示例,其中有人试图以编程方式设置GNU工具/工具链的选项:
//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);