использование файлов .pch с libclang api - PullRequest
1 голос
/ 05 мая 2011

Я пытаюсь использовать .pch, как показано в следующем примере на http://clang.llvm.org/doxygen/group__CINDEX.html, но, похоже, он не работает.

char * args [] = {"-Xclang", "-include-pch = IndexTest.pch"};

TU = clang_createTranslationUnitFromSourceFile (Idx, "IndexTest.c", 2, args, 0, 0);

libclang не может прочитать флаг -include-pch, он читает его как флаг -include.

Я хочу следующее: Мой код зависит от множества заголовков. Я хочу разобрать и создать модуль перевода один раз и сохранить его как файл pch. Теперь я просто хочу, чтобы синтаксический анализ происходил с одним файлом. Можно ли это сделать?

Ответы [ 3 ]

1 голос
/ 12 июня 2011

Я столкнулся с подобной проблемой, может быть, решение также похоже:

Я использую clang для внутренней компиляции кода и вектор, содержащий аргументы для отправки компилятору:

llvm::SmallVector<const char *, 128> Args;
Args.push_back("some");
Args.push_back("flags");
Args.push_back("and");
Args.push_back("options");
//...

Добавление строки типа "Args.push_back (" - include-pch myfile.h.pch ");" приведет к ошибке из-за того, что флаг -include-pch читается как флаг -include.

В этом случае, если вы хотите использовать файл pch, вы должны использовать «два» аргумента:

llvm::SmallVector<const char *, 128> Args;
//...
Args.push_back("-include-pch");
Args.push_back("myfile.h.pch");
//...
0 голосов
/ 10 ноября 2014

В документации Clang вы можете найти пример исходного кода:

// excludeDeclsFromPCH = 1, displayDiagnostics=1
Idx = clang_createIndex(1, 1);

// IndexTest.pch was produced with the following command:
// "clang -x c IndexTest.h -emit-ast -o IndexTest.pch"
TU = clang_createTranslationUnit(Idx, "IndexTest.pch");

// This will load all the symbols from 'IndexTest.pch'
clang_visitChildren(clang_getTranslationUnitCursor(TU), TranslationUnitVisitor, 0);
clang_disposeTranslationUnit(TU);

// This will load all the symbols from 'IndexTest.c', excluding symbols
// from 'IndexTest.pch'.
char *args[] = { "-Xclang", "-include-pch=IndexTest.pch" };
TU = clang_createTranslationUnitFromSourceFile(Idx, "IndexTest.c", 2, args, 0, 0);
clang_visitChildren(clang_getTranslationUnitCursor(TU), TranslationUnitVisitor, 0);
clang_disposeTranslationUnit(TU);

Хотя я не проверял его.Вы нашли рабочее решение?Проверьте мой вопрос о PCH тоже.

0 голосов
/ 09 ноября 2011

Используйте это так:

char *args[] = { "-Xclang", "-include-pch", "IndexTest.pch" };

Это решит вашу проблему.Тем не менее, есть большая проблема, когда вы хотите использовать несколько pchs ... Это не работает, даже с компилятором clang ++.

...