Eclipse CDT:如何以编程方式永久保存项目范围的环境变量

问题描述

|| 我能够以编程方式在项目属性-> C / C ++构建->环境页面上创建项目范围的环境变量。但是,当我重新启动工作空间时,环境变量消失了。 我用来添加新的项目范围环境变量的代码在这里全局变量
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);
    }
我正在寻找一种方法,可在重新启动工作区后将环境变量保留在“环境页”上。     

解决方法

        不使用内部类/ 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
中定义的不同的“操作”。     ,        我解决了自己的问题。如果其他人也有相同的问题,我将在此处包含代码。 解决方案是使用存储环境的StorableEnvironment。 vars转换为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类,因此不建议使用它们,因为它们的实现可能会更改并影响代码的功能。