我正在使用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架构中的另一部分希望这会有所帮助!