Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make doxygen preprocessor recurse into subdirectories?

Tags:

c

doxygen

I do not get the doxygen preprocessor to recursively include files. How to do this?

I made up an example consisting of two headers and a Doxygen file:

subdir/example.h
subdir2/example_include.h
Doxygen

This is the listing of example.h:

#include "example_include.h"

typedef struct
{
    float   array[ARRAY_LENGTH * 2 - 1];
#if CONDITION == MY_FALSE
    char        optional_char;
#endif
} ExampleType;

This is the listing of example_include.h:

#define MY_FALSE            (0u)
#define MY_TRUE             (1u)
#define CONDITION       MY_TRUE
#define ARRAY_LENGTH    (20u)

My changes with regard to the default Doxygen configuration file (using Doxygen 1.8.2) are:

INPUT                  = .
RECURSIVE              = YES
GENERATE_XML           = YES
MACRO_EXPANSION        = YES
INCLUDE_PATH           = .

The output XML of Doxygen for ExampleType (file: xml/struct_example_type.xml) is:

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.2">
  <compounddef id="struct_example_type" kind="struct" prot="public">
    <compoundname>ExampleType</compoundname>
      <sectiondef kind="public-attrib">
      <memberdef kind="variable" id="struct_example_type_1aa7b8f391fc62f93c34c2b305542db339" prot="public" static="no" mutable="no">
        <type>float</type>
        <definition>float ExampleType::array[ARRAY_LENGTH *2-1]</definition>
        <argsstring>[ARRAY_LENGTH *2-1]</argsstring>
        <name>array</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="D:/Sandboxes/ALN_Alignment_SRR295/04_Engineering/01_Source_Code/algo/exmaple/subdir/example.h" line="5" bodyfile="D:/Sandboxes/ALN_Alignment_SRR295/04_Engineering/01_Source_Code/algo/exmaple/subdir/example.h" bodystart="5" bodyend="-1"/>
      </memberdef>
      <memberdef kind="variable" id="struct_example_type_1a8428371f21c1fb8fd28cb1062c7b1152" prot="public" static="no" mutable="no">
        <type>char</type>
        <definition>char ExampleType::optional_char</definition>
        <argsstring></argsstring>
        <name>optional_char</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="D:/Sandboxes/ALN_Alignment_SRR295/04_Engineering/01_Source_Code/algo/exmaple/subdir/example.h" line="7" bodyfile="D:/Sandboxes/ALN_Alignment_SRR295/04_Engineering/01_Source_Code/algo/exmaple/subdir/example.h" bodystart="7" bodyend="-1"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <location file="D:/Sandboxes/ALN_Alignment_SRR295/04_Engineering/01_Source_Code/algo/exmaple/subdir/example.h" line="4" bodyfile="D:/Sandboxes/ALN_Alignment_SRR295/04_Engineering/01_Source_Code/algo/exmaple/subdir/example.h" bodystart="3" bodyend="9"/>
    <listofallmembers>
      <member refid="struct_example_type_1aa7b8f391fc62f93c34c2b305542db339" prot="public" virt="non-virtual"><scope>ExampleType</scope><name>array</name></member>
      <member refid="struct_example_type_1a8428371f21c1fb8fd28cb1062c7b1152" prot="public" virt="non-virtual"><scope>ExampleType</scope><name>optional_char</name></member>
    </listofallmembers>
  </compounddef>
</doxygen>

Actually, I would expect ARRAY_LENGTH to be replaced by (20u) and optional_char should not be a member of the struct.

It seems my question is related to this, however the only promising answer is the comment by @Phineas saying it was an issue that has been fixed in doxygen version 1.7.4. However, I still see the same behavior. What to do about this?

Btw - the "usecase" is simple: It's a visual studio project. The compiler includes all files as desired, as they are all contained in the project defintion.

like image 794
Jakob S. Avatar asked Dec 05 '12 08:12

Jakob S.


1 Answers

Have you set RECURSIVE to YES?

# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.

RECURSIVE              = YES

it's in the Doxyfile

source

And to be clear, the default value is NO.

like image 58
Geremia Avatar answered Oct 22 '22 11:10

Geremia