我正在开发一个Eclipse插件,除此之外还必须检查当前C项目中设置了哪些编译器选项。 基本上,我想访问属性 - > C / C ++ Build - >设置 - > GCC 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()函数:How do I programmatically change the Eclipse CDT tool settings for a file?
所以,感谢justinmreina的回答!
答案 0 :(得分:2)
你在一条黑暗而寂寞的道路上行走,我的朋友:)。但仍然很有趣。
在自定义工具链/工具上设置选项
以下是有人尝试以编程方式设置GNU工具/工具链选项的示例:
*和以下是同一作者的解决方案后台主题:
他在这里所做的将会帮助你解决问题。我建议首先浏览org.eclipse.cdt.managedbuild.gnu.ui的plugin.xml。专注于工具链,工具及其选项。
查找GNU C工具链/工具的选项
此外,这是一篇有用的文章,我在“GNU C项目”中找到了dang选项。不是OP的确切问题,但答案与您的问题相关。
<强>结论强>
我强烈怀疑你是否会找到答案&lt; 10行代码,甚至可以设置&#39; -v&#39;编译器的标志...如果您确实找到了一个简单的结果,我建议将其作为后续内容发布在此处。
祝你好运!
编辑:我现在已经咀嚼了一段时间,因为我最近绊倒/失败了。以下是如何从代码中设置选项。
//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资源”,该方法变得(有点......)清晰 - 每个对象调用以访问字段只是访问.cproject资源的XML模式中的另一个部分
希望这有帮助!