Я пытаюсь разобрать файл cpp с помощью libclang и python.
Проблема в том, что когда я не объявляю класс, foo
функция игнорируется libclang, пока она находит testString
и main()
.
//test.cpp
std::string test1::foo(){
}
std::string *testString = "";
int main()
{
return 0;
}
Когда я объявляю класс test1 перед прототипом функции, как показано ниже, он обнаруживает foo
функцию.
//test.cpp
class test1{
private:
std::string foo();
};
std::string test1::foo(){
}
std::string *testString = "";
int main()
{
return 0;
}
Мой скромный скрипт синтаксического анализатора:
import sys
import clang.cindex
clang.cindex.Config.set_library_file('C:/Program Files/LLVM/bin/libclang.dll')
def list_nodes(node):
for c in node.get_children():
print("-------------------")
print(c.spelling)
print(c.access_specifier)
print(c.type.kind)
list_nodes(c)
index = clang.cindex.Index.create()
tu = index.parse("test.cpp")
list_nodes(tu.cursor)
Проблема моего проекта в том, что я использую cmake и хочу проанализировать некоторые из файлов cpp и извлечь из них информацию.Поскольку мой проект опирается на cmake, большую часть времени заголовочные и исходные файлы не находятся в одном каталоге.Я не хочу создавать беспорядок с привязкой этих файлов в другом месте.Есть ли практика автоматически получать заголовки из файлов cmake.Или, альтернативно, способ синтаксического анализа этих функций и переменных только в файлах cpp.