下图我们看到的是一个Eclipse Embedded C/C++项目的build Settings界面。他里面的一些配置项我们二次开发时应该如何自动匹配修改呢?
1、Eclipse Embedded C项目一般有多个Configuration。如上图的箭头部分,新建项目后默认有两个Configuration。Debug和Relese。当然也可以自定义,增加或者删除Configuration。如何获取所项目中所有的Configuration呢?
IConfiguration[] projectConfigs = ManagedBuildManager.getBuildInfo(curPro).getManagedProject()
.getConfigurations();
用这句话即可,curPro就是IProject,项目对象。
2、如何获取当前活动的configuration?如何修改当前活动的configuration呢?
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(curPro);
IConfiguration config = info.getDefaultConfiguration();
设置活动的config:
info.setDefaultConfiguration(config);
3、如何通过Configuration修改里面变量的值呢?
获取值或者修改值,主要是要获取IOption。如下图
红框里面的内容可以通过
IToolChain toolchain = config.getToolChain();
IOption option = toolchain.getOptionBySuperClassId(id);
这种方法来获取,红框之外的可以通过下面的方法来获取:
a: for (ITool t : config.getTools()) {
for (IOption o : t.getOptions()) {
if (o.getId().contains(id)) {
option = o;
break a;
}
}
}
这里面的id是什么呢,其实每一个Option都有一个id 。这个id我们如何查找呢,可以到cdt插件里面看源码。可以跟界面对应起来的。
比如我们在源码中看到
org.eclipse.embedcdt.managedbuild.cross.arm.core。这个插件的plugin.xml就描述了页面中大部分的ID。
4、option 取值设置的方法有getValue和setValue。如果我setValue之后,如何保存呢?下面这段代码可以保存我们修改后的值。
ManagedBuildManager.saveBuildInfo(curPro, true);
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceDescription workspaceDesc = workspace.getDescription();
boolean autoBuilding = workspaceDesc.isAutoBuilding();
workspaceDesc.setAutoBuilding(autoBuilding);
try {
workspace.setDescription(workspaceDesc);
} catch (CoreException e) {
MessageDialog.openError(viewForm.getShell(), "Error", e.toString());
}
如果不加这段代码,那么你代码修改的属性值,在eclipse重启后,值又会复原。这几段代码可以把修改后的值保存到项目的.cproject文件中去,就相当于永远保存了。