我能够以编程方式为项目属性创建项目范围的环境变量 - > C / C ++ Build - >环境页面。但是,当我重新启动工作区时,环境变量就会消失。
我用来添加新的项目范围环境变量的代码在这里:
全局变量:
private ICConfigurationDescription cfgd = null;
private final MultiCfgContributedEnvironment ce = new MultiCfgContributedEnvironment();
内幕法:
ICConfigurationDescription[] cfgs;
cfgs = new ICConfigurationDescription[] {cfgd};
for (ICConfigurationDescription cfg : cfgs) {
ce.addVariable("PKG_CONFIG_LIBDIR", dir,
EnvironmentVariable.ENVVAR_APPEND, SEPARATOR, cfg);
}
我正在寻找一种方法,在重新启动工作区后将环境变量保留在“环境页面”上。
答案 0 :(得分:3)
我解决了自己的问题。如果其他人有同样的问题,我在这里包含代码。
解决方案是使用存储env的StorableEnvironment。 vars to XML。
UserDefinedEnvironmentSupplier fUserSupplier = EnvironmentVariableManager.fUserSupplier;
StorableEnvironment vars = fUserSupplier.getWorkspaceEnvironmentCopy();
vars.createVariable("PKG_CONFIG_LIBDIR", dir);
fUserSupplier.setWorkspaceEnvironment(vars);
请注意
org.eclipse.cdt.internal.core.envvar.EnvironmentVariableManager;
org.eclipse.cdt.internal.core.envvar.UserDefinedEnvironmentSupplier;
是不是建议内部API类使用它们,因为它们的实现可能会改变并影响代码的功能。
答案 1 :(得分:3)
另一种不使用内部类/ API的解决方案是:
IContributedEnvironment environment = CCorePlugin.getDefault().getBuildEnvironmentManager().getContributedEnvironment();
ICProjectDescription projectDescription = CoreModel.getDefault().getProjectDescription(project, true);
ICConfigurationDescription config = projectDescription.getActiveConfiguration(); // or any other configuration...
// Add variable to project configuration
environment.addVariable("PKG_CONFIG_LIBDIR", dir, IEnvironmentVariable.ENVVAR_APPEND, null, config);
// Update project (description)
CoreModel.getDefault().setProjectDescription(project, projectDescription);
请注意,使用null
代替config
会将变量添加到全局/工作区环境中。
还要注意IEnvironmentVariable
中定义的不同"操作"。