Получить выполненные команды компилятора GCC / clang в Eclipse CDT - PullRequest
0 голосов
/ 27 августа 2018

Я работаю над плагином Eclipse, который генерирует базу данных компиляции для clang.

Мне удалось загрузить управляемые конфигурации и получить имена файлов длябыть скомпилированным.Однако мне нужно получить команды компилятора (gcc, clang, vc, ...), определенные путем вызова управляемой системы make, поскольку мне нужно сохранить эти команды в базе данных компиляции.

Есть ли способподключиться к процессу компиляции CDT, чтобы получить доступ к командам компилятора?

Немного справочной информации: я написал свой собственный плагин для сборщика, который выполняется перед сборщиком CDT.Сам по себе плагин не настолько впечатляющий.Тем не менее, он способен загружать все конфигурации сборки и связанные с ними цепочки инструментов, которые генерируют исполняемые файлы, что означает, что я могу использовать их.

Конфигурации сборки хранятся в карте и доступны через имя конфигурации: Map<String, List<IConfiguration>> configurations = new TreeMap<>();

Дельта-посетитель является упрощением того, который представлен в примерах Eclipse PDE:

private class SampleDeltaVisitor implements IResourceDeltaVisitor
{
    private final CompilationDatabaseEditor editor;

    public SampleDeltaVisitor(CompilationDatabaseEditor editor)
    {
        this.editor = editor;
    }

    @Override
    public boolean visit(IResourceDelta delta) throws CoreException
    {
        IResource resource = delta.getResource();
        if ((resource.getFileExtension() != null) && (SUPPORTED_FILE_TYPES.contains(resource.getFileExtension())))
        {
            switch (delta.getKind())
            {
                case IResourceDelta.ADDED:
                    System.out.println("Adding " + resource.getName());
                    editor.addEntry(resource.getFullPath().toOSString(), "", resource.getFullPath().removeLastSegments(1).toOSString());
                    break;
                case IResourceDelta.REMOVED:
                    System.out.println("Removing " + resource.getName());
                    editor.removeEntry(resource.getFullPath().toOSString(), "", resource.getFullPath().removeLastSegments(1).toOSString());
                    break;
                case IResourceDelta.CHANGED:
                    System.out.println("Changing " + resource.getName());
                    editor.removeEntry(resource.getFullPath().toOSString(), "", resource.getFullPath().removeLastSegments(1).toOSString());
                    editor.addEntry(resource.getFullPath().toOSString(), "", resource.getFullPath().removeLastSegments(1).toOSString());
                    break;
            }
        }
        //return true to continue visiting children.
        return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...