Eclipse CDT: Как программно (постоянно) сохранять переменные среды проекта - PullRequest
3 голосов
/ 31 мая 2011

Я могу создавать переменные среды всего проекта программно в свойствах проекта -> 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 ]

3 голосов
/ 15 сентября 2014

Другое решение без использования внутренних классов / 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.

3 голосов
/ 01 июня 2011

Я решил свой вопрос. Я включаю код здесь, если у кого-то есть такая же проблема.

Решение состоит в том, чтобы использовать StorableEnvironment, в котором хранятся env. Варь в 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, и поэтому их использование не рекомендуется, поскольку их реализация может измениться и повлиять на функциональность вашего кода.

...