Как программно добавить определения макросов и пути поиска библиотек в проект Eclipse CDT? - PullRequest
0 голосов
/ 16 июня 2020

Я хочу программно добавить пути включения и определения макросов в проект CDT, используя точку расширения externalSettingsProvider, и я изо всех сил пытался найти руководство по основам, поэтому этот вопрос предназначен для этого.

Пока что я создал проект плагина, на вкладке расширений редактора плагина xml я добавляю расширение, чтобы плагин. xml читается следующим образом:

    <plugin>
       <extension
             id="my_id"
             name="Settings I want in the project"
             point="org.eclipse.cdt.core.externalSettingsProvider">
          <provider
                class="com.example.MySettingsProvider">
          </provider>
       </extension>
    </plugin>

Затем Реализую упомянутый класс. Вот пример моей реализации:

    public class MySettingsProvider extends CExternalSettingProvider {
        @Override
        public CExternalSetting[] getSettings(IProject project, ICConfigurationDescription cfg) {
            final ArrayList<ICSettingEntry> allSettings = new ArrayList<ICSettingEntry>();

            CMacroEntry myMacro = CDataUtil.createCMacroEntry("WINE_CHOICE", "WHITE", ICSettingEntry.NONE);
            allSettings.add( myMacro );

            CIncludePathEntry myInclude = CDataUtil.createCIncludePathEntry("path/to/include", ICSettingEntry.NONE);
            allSettings.add( myInclude );

            final ICSettingEntry[] settings = allSettings.toArray(new ICSettingEntry[allSettings.size()]);
            return new CExternalSetting[]{new CExternalSetting(null, null, null, settings)};
        }
    }

Возможно, это не лучший способ сделать это - я открыт для отзывов для улучшения, но я думаю, что это должно привести к некоторым настройкам, которые можно добавить в Проект CDT.

Вот тут я падаю - getSettings никогда не вызывается. Я могу создать новый проект CDT, добавить исходные файлы и построить их, но если я поставлю точку останова в методе getSettings, он никогда не сработает. Возможно, мне нужно где-то зарегистрировать своего провайдера? Ни один из существующих сайтов, которые я нашел, не говорит вам, как это сделать.

1 Ответ

0 голосов
/ 16 июня 2020

Для меня это сработало, чтобы вызвать getSettings:

final IProject project = getTheProjectYouWantToContributeTo();
final ICProjectDescription projectDescription = CoreModel.getDefault().getProjectDescription(project);
final ICConfigurationDescription[] cfgDes = projectDescription.getConfigurations();
for ( final ICConfigurationDescription cfgDe : cfgDes ) {
    String[] idArray = cfgDe.getExternalSettingsProviderIds();
    ArrayList<String> idList = new ArrayList<String>(Arrays.asList( idArray ));
    boolean idAlreadyPresent = idList.contains( MySettingsProvider.ID );
    if (!idAlreadyPresent ) {
        idList.add( MySettingsProvider.ID );
    }
    idArray = idList.toArray( new String[idList.size()]
    cfgDe.setExternalSettingsProviderIds(idArray);
}

Когда вы должны это вызвать и как вы должны подключить его к жизненному циклу проекта? Не знаю ...

...