XML Documentation for C++ Code
Go Up to XML Compiler Output
Previous-generation C++ compilers can generate an XML file with the declarations from a C++ source file and the included headers. The information that is generated is similar to the information being displayed by the C++ Class Explorer, in the sense that both display information from the symbol table of the compiler.
To enable this feature, select Project > Options > C++ Compiler > Advanced and, under Other Options, add one of the command-line options listed below to the "Additional options to pass to the compiler" option.
To enable this feature on the command line, run the command-line compiler with one of the command-line options listed below.
The format (schema) of the XML file is described in Compiler XML Output Global Declarations.
Contents
Command-Line Options for XML Output
-Zx - Generate XML Output
The -Zx option prompts the compiler to generate an XML file of the symbols encountered while processing a C++ source file and its headers. For example, given the following source file (test.cpp), the -Zx option makes the compiler produce the XML file test.xml shown below:
test.cpp:
class TBase {
int id;
};
class TDerived : public TBase {
char *name;
};
test.xml:
<?xml version="1.0" encoding="utf-8"?>
<file name="test.cpp">
<class name="TBase" visibility="public">
<members>
<field name="id" type="int" visibility="private" />
</members>
</class>
<class name="TDerived" visibility="public">
<ancestor name="TBase">
<fieldref name="id" visibility="private" />
</ancestor>
<members>
<field name="name" type="char *" visibility="private" />
</members>
</class>
</file>
You can append any combination of the following suboptions to the -Zx option to modify its behavior:
f: Skip base type members.m: Emit macros.p: Emit file and line position.
-Zxf - Skip Ancestor Information
When processing a class for XML output by default, the compiler generates information about members of the base types (ancestors) of that class. The f suboption instructs the compiler not to generate any information for base types. The following table illustrates how the suboption f changes the generated .xml for the test.cpp file.
test.xml without the f suboption:
<?xml version="1.0" encoding="utf-8"?>
<file name="test.cpp">
<class name="TBase" visibility="public">
<members>
<field name="id" type="int" visibility="private" />
</members>
</class>
<class name="TDerived" visibility="public">
<ancestor name="TBase">
<fieldref name="id" visibility="private" />
</ancestor>
<members>
<field name="name" type="char *" visibility="private" />
</members>
</class>
</file>
test.xml with the f suboption:
<?xml version="1.0" encoding="utf-8"?>
<file name="test.cpp">
<class name="TBase" visibility="public">
<members>
<field name="id" type="int" visibility="private" />
</members>
</class>
<class name="TDerived" visibility="public">
<members>
<field name="name" type="char *" visibility="private" />
</members>
</class>
</file>
-Zxp - Generate Position Information
The p suboption instructs the compiler to include attributes describing the file and line of each declaration. The following table illustrates test.xml with the p suboption enabled.
test.xml with the p suboption:
<?xml version="1.0" encoding="utf-8"?>
<file name="test.cpp">
<class name="TBase" visibility="public" file="test.cpp" line="1">
<members>
<field name="id" type="int" visibility="private" file="test.cpp" line="2" />
</members>
</class>
<class name="TDerived" visibility="public" file="test.cpp" line="5">
<ancestor name="TBase">
<fieldref name="id" visibility="private" />
</ancestor>
<members>
<field name="name" type="char *" visibility="private" file="test.cpp" line="6" />
</members>
</class>
</file>