How to make doxygen preprocessor recurse into subdirectories?
c, doxygen
Solution
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.
Problem
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.