Я работаю над плагином 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;
}
}