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

时间:2011-05-31 11:16:18

标签: java eclipse environment-variables eclipse-cdt

我能够以编程方式为项目属性创建项目范围的环境变量 - > 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);
    }

我正在寻找一种方法,在重新启动工作区后将环境变量保留在“环境页面”上。

2 个答案:

答案 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中定义的不同"操作"。