c++windowscode-assist

What is a good way to find definitions in header files when using gcc?


Does anyone have a recommended way to find definitions in header files when using gcc? When using MSVC, I can just right-click and select "Go to definition" which is really nice.

I have used netbeans + gcc, and it does have code assistance including hyperlinking to the definition, so that is one option. However, I would like to know if there are any other IDEs with that functionality and also the best way when not using an IDE.


Solution

  • You can run Doxygen to generate an HTML-based source browser. This does not require that the code be annotated with Doxygen-style documentation. It works for multiple language, including C++, Java, and Markdown (.md files go to "Related Pages").

    Here's a way of configuring and launching Doxygen from the command-line (tested on Linux)...

    ## basic
    echo -e "SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n RECURSIVE=YES\n" |doxygen -
    xdg-open html/index.html
    

    or

    ## include diagrams and non-public content -- and launch browser immediately
    echo -e "HAVE_DOT=YES\n CALL_GRAPH=YES\n CALLER_GRAPH=YES\n SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n EXTRACT_PRIVATE=YES\n EXTRACT_STATIC=YES\n RECURSIVE=YES\n SEPARATE_MEMBER_PAGES=YES\n GENERATE_LATEX=NO\n EXCLUDE_SYMLINKS=YES" |doxygen - && chromium-browser --new-window html/index.html
    

    There is a companion program called doxywizard which lets you browse through the many configuration options available for customizing the generated HTML. Alternatively, you can run doxygen -g to create an initial configuration file (which includes detailed hints).

    I recommend the following non-default options to generate a source browser:

    SOURCE_BROWSER=YES ## display source code
    EXTRACT_ALL=YES ## display all items (not just "documented" ones)
    RECURSIVE=YES ## include source found in subdirectories
    SEPARATE_MEMBER_PAGES=YES ## optional -- each class member has its own page
    

    Once you have the main web page up, you can browse to the source of interest (or use the search feature). The source is cross-referenced with clickable links to relevant declarations.


    I've run into this problem a few times: doxygen can create really long filenames and Linux encrypted home directory has a limit of 143 characters. To work around this, you may have to write the html folder outside of your home.

    A quick and dirty solution is to link html to a folder in /tmp or /dev/shm -- maybe also chmoding the permissions for better data security.