# ctags(1)

## NAME

         ctags - Generates "tags" and (optionally) "refs" files

## SYNOPSIS

         ctags [-stvra] filesnames...

## DESCRIPTION

         ctags generates the "tags" and "refs" files from  a  group  of  C  source
         files.   The  "tags"  file  is  used  by Elvis' ":tag" command, control-]
         command, and -t option.  The "refs" file is sometimes used by the  ref(1)
         program.

         Each C source file is scanned for #define statements and global  function
         definitions.   The  name  of  the macro or function becomes the name of a
         tag.  For each tag, a line is added to the "tags" file which contains:
                     - the name of the tag
                     - a tab character
                     - the name of the file containing the tag
                     - a tab character
                     - a way to find the particular line within the file.

         The filenames list will typically be the names of all C source  files  in
         the current directory, like this:
              $ ctags -stv *.[ch]

## OPTIONS

         -t   Include typedefs.  A tag will be  generated  for  each  user-defined
              type.  Also tags will be generated for struct and enum names.  Types
              are considered to be global if they are defined in  a  header  file,
              and static if they are defined in a C source file.

         -v   Include variable declarations.  A tag will  be  generated  for  each
              variable,  except  for  those that are declared inside the body of a
              function.

         -s   Include static tags.  Ctags will normally put  global  tags  in  the
              "tags"  file, and silently ignore the static tags.  This flag causes
              both global and static tags to be added.  The name of a  static  tag
              is  generated  by  prefixing  the name of the declared item with the
              name of the file where it is defined, with a colon in between.   For
              example,  "static  foo(){}"  in  "bar.c"  results  in  a  tag  named
              "bar.c:foo".

         -r   This causes ctags to generate both "tags" and "refs".   Without  -r,
              it would only generate "tags".

         -a   Append to "tags", and  maybe  "refs".   Normally,  ctags  overwrites
              these  files  each time it is invoked.  This flag is useful when you
              have to many files in the current directory for you to list them  on
              a single command-line; it allows you to split  the  arguments  among
              several invocations.

## FILES

         tags A cross-reference that lists each tag name, the name of  the  source
              file  that contains it, and a way to locate a particular line in the
              source file.

         refs The "refs" file contains the definitions for each tag in the  "tags"
              file,  and  very little else.  This file can be useful, for example,
              when licensing restrictions prevent you from making the source  code
              to  the  standard  C  library  readable  by everybody, but you still
              everybody to know what arguments the library functions need.

## BUGS

         ctags is sensitive to indenting and line breaks.  Consequently, it  might
         not  discover  all  of the tags in a file that is formatted in an unusual
         way.

## SEE ALSO

         elvis(1), refs(1)

## AUTHOR

         Steve Kirkendall
         kirkenda@cs.pdx.edu