2016-06-17 2 views
0

Я генерирующего AST для объектного кода C на .m файл команда будет примерно как clang-check -ast-dump /source/file.m &> /output/file.txtОпущенные блоки кода от лязга AST для ObjectiveC

Это была ошибка, которая сказала

Error while trying to load a compilation database: Could not auto-detect compilation database for file '/source/file.m' 

No compilation database found in /source or any parent directory 

json-compilation-database: Error while opening JSON database: No such file or directory 

Running without flags. 

In file included from /source .. fatal error:'UIKit/UIKit.h' file not found 

Я m не уверен, связано ли это с ошибкой, описанной выше, но многие из моих блоков CompoundStmt пустые. Если они содержат код C или C++, они отражаются в CompoundStmt, но не тогда, когда он содержит код, например NSString *query = [NSString stringWithFormat:@"select * from peopleInfo where peopleInfoID=%d, self.recordIDToEdit] или даже NSString *abc = "ABC"

ответ

1

Вам необходимо сгенерировать что-то, что называется базой данных компиляции. Для Clang это будет json-файл (имя по умолчанию: compile_commands.json)

Вы можете прочитать об этом here.

Инструменты, основанные на C++ Аннотация Синтаксическое дерево нуждается в полной информации, как для анализа единицы перевода. Обычно эта информация неявно доступна в системе сборки, но работающие инструменты как часть системы построения не обязательно являются лучшим решением.

База данных компиляции - это файл JSON, состоящий из массива«Объекты команд», где каждый объект команды указывает один способ, в котором скомпилирован блок перевода .

Образец файла JSON будет выглядеть следующим образом:

[ 
    { 
    "directory": "/source", 
    "command": "clang++ <file>.m", 
    "file": "/source/div0.c" 
    } 
] 

Вы можете прочитать here и here о том, как настроить базу данных компиляции.

Смежные вопросы