2016-08-16 4 views
1

Как вы создаете ctags только для функций и игнорируете typedefs и structs? Я пробовал ctags --declarations --output=tags program.c, но мне нужно вручную разобрать эти функции. Я пробовал: ctags -x --c-kinds=fp path_to_file. 2, но я получаю следующее сообщение об ошибке:Как получить только функции ctags

ctags: unrecognized option '--c-kinds=fp' 
    Try `ctags --help' for a complete list of options. 

Edit: После установки буйный, следующий делает трюк, чтобы получить только функции заголовков:

ctags -x --c-types=f ./prog.c 

Для тех, кто который сталкивается с этим вопросом, если вы хотите всю функцию (заголовок и тело), ​​вам нужно написать сценарий для этого. Но это не слишком сложно. Я использую заголовки функций, по сути, индексы. Просто прочитайте и найдите, где каждый заголовок функции находится в файле, чтобы получить уникальный индекс. Некоторые имена функций одинаковы, поэтому перебирайте код и используйте некоторое время, чтобы добавлять и продолжать смотреть в коде для этой функции, пока не получите другой индекс от индекса в вашем списке индексов. Сохраните имя и позицию функции в списке кортежей, а затем отсортируйте список в порядке возрастания. Затем прочитайте функции извлечения кода, начиная с верхней части первой функции и прочитав ее до следующей в списке. Возможно, вам придется сделать некоторые изменения в зависимости от вашей ситуации.

ответ

1

Убедитесь, что вы используете Exuberant Ctags. На моей системе:

$ ctags --version 
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert 
    Compiled: Nov 11 2010, 03:54:52 
    Addresses: <[email protected]>, http://ctags.sourceforge.net 
    Optional compiled features: +wildcards, +regex 

Ваша система должна быть символически связан etags с ctags. Когда я это сделаю, я реплицирую сообщение об ошибке. Тем не менее, неизвестная ошибка вариант использования буйный Ctags показывает, как:

ctags: Unknown option: --foo 
0

Если вам необходимо сгенерировать объявления функций из источника, вы можете легко сделать это с небольшим Ctags и SED магии:

ctags -x --c-types=f source.c|cut -c51- |sed -e 's/$/;/g' > header.h