'ctags' command is not creating tags for C header files

c, ctags, vim

Solution

If you execute (your version):

find . -name \*.[ch] -exec ctags {} \;

then `find` executes `ctags` once for each file that is found. The `tags` file is overwritten each time, and only the tags for the last file remain.

Instead, you need to tell `find` to execute `ctags` exactly once, and specify all the matching files in one call. This is how you do that:

find . -name \*.[ch] -exec ctags {} +

OR (I like `trojanfoe`'s version from the comment below because it is easier to read):

ctags $(find . -name \*.[ch])

Problem

I am trying to create a tag file manually for C sources (`*.c` and `*.h`) using `ctags` command. Unfortunately the tag file is not having entries of all files, specially the header files. I am using following command on the command prompt: ``` find . -name \*.[ch] -exec ctags {} \; ``` Kindly point out if I am missing some flag or something else above.

Original source