Doxygen とプリプロセッサ
上の話題に関連して、 C/C++ プリプロセッサを Ruby で実装した人がいないか探していたら、こんなページを発見。
クラスのメンバメソッドをマクロで宣言すると、 Doxygen なんかで展開したときに解析されなくて Bad だよねー、という話。そうそう。うちにもそういうクラスがあるんです。しかもたくさん。
このページのコメントによると、 doxyfile で EXPAND_AS_DEFINED を設定しておくとよいとか。
というわけで自前の doxyfile を眺めてみると、確かにそれらしい設定があります。眺めてみた限りだと、
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition.
どうやら MACRO_EXPANSION を YES にしろと言っているようです。というわけで、こんなダミープログラムを書いて実験してみました。
サンプルコード
#include <stdio.h> #define DECL_METHOD \ void test() { puts("test"); } \ void test2() { puts("test2"); } class Test { public : DECL_METHOD }; class Test2 : public Test {}; class Test3 : public Test {}; void main() { Test2 t2; t2.test(); t2.test2(); Test3 t3; t3.test(); t3.test2(); }
このあと doxygen -g test.doxyfile で設定ファイルを生成して、
MACRO_EXPANSION = YES
HAVE_DOT = YES
UML_LOOK = YES