我在标题中有#define
个值,我当然希望Doxygen记录,但我在 C 文件中有其他文件,我将其视为静态常量,我不希望Doxygen记录它们。像
#define NUMBER_OF(a) (sizeof((a))/sizeof((a)[0]))
#define MSTR(e) #e
如何让Doxygen不将这些#define
放入它创建的文档中?我尝试用@internal
标记它,但这似乎没有帮助。
关于Doxygen和#define
的一个有点相关的问题,我怎么能得到:
#define SOME_CONSTANT 1234 /**< An explanation */
在输出中输入“SOME_CONSTANT”和“An explain”而不是“1234”?
答案 0 :(得分:9)
无需使用\cond
和\endcond
命令。您只需使用\hideinitializer
命令即可隐藏初始化程序:
#define SOME_CONSTANT 1234 /**< An explanation @hideinitializer */
关于第一个问题,您可以设置HIDE_UNDOC_MEMBERS = YES
,只有具有Doxygen文档块的宏将显示在输出中。
答案 1 :(得分:4)
您可以在doxyfile中设置MAX_INITIALIZER_LINES = 0以隐藏定义的值。
答案 2 :(得分:3)
您可以使用\cond
...
\endcond
标记从Doxygen解析中排除代码的任何部分。
编辑:一些相关问题:
答案 3 :(得分:1)
毫无疑问,它仍然会显得嘈杂和不自然,但要解决您的其他问题,请尝试:
/** An explanation */
#define SOME_CONSTANT /** @cond */ 1234 /** @endcond */
答案 4 :(得分:1)
您只想记录.h
文件中声明的内容。我假设您在static
文件中将所有静态函数和变量声明为.c
。所有剩余的都在.h
相应的文件中声明。这些是您的“公共”成员。
在这种情况下我喜欢做什么,而且我相信doxygen更适合用这种方式:
Doxyfile
中EXTRACT_ALL = NO
并将.h
文件所在的目录添加到INPUT
/** \file */
添加到您的所有.h
个文件中(但不包括.c
个文件)。这将仅索引.h
个文件中包含的内容。您仍然可以在.c
将INPUT
文件的目录添加到Doxyfile
,然后会扫描这些文件以获取“公共”成员的其他文档......
答案 5 :(得分:0)
我通过将文档从.c文件移动到.h文件解决了这个问题。然后只在.h文件上运行doxygen。
然后我想要记录的项目(&#39;公共&#39;项目)本质上是doxygen选择的。
因为我以前一直小心翼翼地把公众&#39; .h文件中的项目和私有&#39; .c文件中的项目非常有效。
当我注意到doxygen正在拉入包含时,我想到了这种技术。让我感到震惊的是,如果我还要移动调用模块需要使用我的模块的包含子集,那么该列表也将被记录。
此技术还有一个额外的好处:我可以在更新文档时将文档放在一个终端窗口中,将源放在不同的终端窗口中。
答案 6 :(得分:0)
有时候,您可能有一个要记录的定义,但是想要doxygen对其进行不同的处理(甚至完全忽略它,以避免解析错误)。 为此,您可以在Doxygen中定义#define,与在源代码中定义不同。
示例: 一些编译器允许变量链接到特定段,即:
const int myvar @ "segment_of_myvar_in_memory"=123;
=> doxygen将解析“ segment_of_myvar_in_memory”部分作为不需要的变量名。 我们可以为其使用定义:
#define __link_to_segment(name) @ name
const int myvar __link_to_segment("segment_of_myvar_in_memory")=123;
如果“预处理”处于活动状态,则Doxygen现在将我们的变量解释为一个函数,因为类似于函数的定义都使用方括号。 但是,如果我们在Doxyfile中重新定义定义,则行为会改变:
PREDEFINED = __link_to_segment(a)=
现在变量已正确解析为变量-前面的所有类型或关键字也正确显示为关键字。
一个不错的侧面效果: 如果您在代码中使用2个不同的IDE(一个用于编译和调试的IDE,一个用于编辑的IDE),您还会发现某些IDE(即Eclipse)在解析带有@“ segment name”的变量时遇到问题。使用上述方法,您也可以在那里重新定义__link_to_segment(name):
#define __link_to_segment(name)
即然后,Eclipse将正确显示并解析该变量,而“编译和调试” IDE仍可以将变量链接到其段名。