title: How to make doxygen preprocessor recurse into subdirectories?
body: <p>I do not get the doxygen preprocessor to recursively include files. How to do this?</p>
  
  <p>I made up an example consisting of two headers and a Doxygen file:</p>
  
  <pre><code>subdir/example.h
  subdir2/example_include.h
  Doxygen
  </code></pre>
  
  <p>This is the listing of <code>example.h</code>:</p>
  
  <pre><code>#include "example_include.h"
  
  typedef struct
  {
      float   array[ARRAY_LENGTH * 2 - 1];
  #if CONDITION == MY_FALSE
      char        optional_char;
  #endif
  } ExampleType;
  </code></pre>
  
  <p>This is the listing of <code>example_include.h</code>:</p>
  
  <pre><code>#define MY_FALSE            (0u)
  #define MY_TRUE             (1u)
  #define CONDITION       MY_TRUE
  #define ARRAY_LENGTH    (20u)
  </code></pre>
  
  <p>My changes with regard to the default Doxygen configuration file (using Doxygen 1.8.2) are:</p>
  
  <pre><code>INPUT                  = .
  RECURSIVE              = YES
  GENERATE_XML           = YES
  MACRO_EXPANSION        = YES
  INCLUDE_PATH           = .
  </code></pre>
  
  <p>The output XML of Doxygen for <code>ExampleType</code> (file: <code>xml/struct_example_type.xml</code>) is:</p>
  
  <pre><code>&lt;?xml version='1.0' encoding='UTF-8' standalone='no'?&gt;
  &lt;doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.2"&gt;
    &lt;compounddef id="struct_example_type" kind="struct" prot="public"&gt;
      &lt;compoundname&gt;ExampleType&lt;/compoundname&gt;
        &lt;sectiondef kind="public-attrib"&gt;
        &lt;memberdef kind="variable" id="struct_example_type_1aa7b8f391fc62f93c34c2b305542db339" prot="public" static="no" mutable="no"&gt;
          &lt;type&gt;float&lt;/type&gt;
          &lt;definition&gt;float ExampleType::array[ARRAY_LENGTH *2-1]&lt;/definition&gt;
          &lt;argsstring&gt;[ARRAY_LENGTH *2-1]&lt;/argsstring&gt;
          &lt;name&gt;array&lt;/name&gt;
          &lt;briefdescription&gt;
          &lt;/briefdescription&gt;
          &lt;detaileddescription&gt;
          &lt;/detaileddescription&gt;
          &lt;inbodydescription&gt;
          &lt;/inbodydescription&gt;
          &lt;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"/&gt;
        &lt;/memberdef&gt;
        &lt;memberdef kind="variable" id="struct_example_type_1a8428371f21c1fb8fd28cb1062c7b1152" prot="public" static="no" mutable="no"&gt;
          &lt;type&gt;char&lt;/type&gt;
          &lt;definition&gt;char ExampleType::optional_char&lt;/definition&gt;
          &lt;argsstring&gt;&lt;/argsstring&gt;
          &lt;name&gt;optional_char&lt;/name&gt;
          &lt;briefdescription&gt;
          &lt;/briefdescription&gt;
          &lt;detaileddescription&gt;
          &lt;/detaileddescription&gt;
          &lt;inbodydescription&gt;
          &lt;/inbodydescription&gt;
          &lt;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"/&gt;
        &lt;/memberdef&gt;
        &lt;/sectiondef&gt;
      &lt;briefdescription&gt;
      &lt;/briefdescription&gt;
      &lt;detaileddescription&gt;
      &lt;/detaileddescription&gt;
      &lt;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"/&gt;
      &lt;listofallmembers&gt;
        &lt;member refid="struct_example_type_1aa7b8f391fc62f93c34c2b305542db339" prot="public" virt="non-virtual"&gt;&lt;scope&gt;ExampleType&lt;/scope&gt;&lt;name&gt;array&lt;/name&gt;&lt;/member&gt;
        &lt;member refid="struct_example_type_1a8428371f21c1fb8fd28cb1062c7b1152" prot="public" virt="non-virtual"&gt;&lt;scope&gt;ExampleType&lt;/scope&gt;&lt;name&gt;optional_char&lt;/name&gt;&lt;/member&gt;
      &lt;/listofallmembers&gt;
    &lt;/compounddef&gt;
  &lt;/doxygen&gt;
  </code></pre>
  
  <p>Actually, I would expect <code>ARRAY_LENGTH</code> to be replaced by <code>(20u)</code> and <code>optional_char</code> should not be a member of the struct.</p>
  
  <p>It seems my question is related to <a href="https://stackoverflow.com/questions/5121333/how-do-i-get-doxygen-to-expand-macros-from-include-files">this</a>, 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?</p>
  
  <p>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.</p>