我可以在 Doxygen 生成的文档的命名空间列表中显示全局命名空间吗?我有一些函数extern "C",它们出现在声明它们的头文件的文档中,但不在命名空间列表中,给人的印象是它们并不真正存在......
我定义了以下宏,并尝试在生成文档时扩展它。
#define GETSET(param) \
bool CYNOVE_Enable##param(postproc_ctx_t ctx, bool enable) \
{ \
struct postproc_ctx * c; \
c = (struct postproc_ctx *)ctx; \
c->do_##param = enable?1:0; \
return TRUE; \
} \
Run Code Online (Sandbox Code Playgroud)
在 doxygen 中,如果我使用:
MACRO_EXPANSION = YES
Run Code Online (Sandbox Code Playgroud)
然后当我使用宏时它会被扩展。但是如果设置:
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
EXPAND_AS_DEFINED = GETSET
Run Code Online (Sandbox Code Playgroud)
宏未展开
因为我认为,其中一个答案是错误的,但评论对于任何冗长的解释来说都很糟糕,让我补充一下我认为这应该如何工作。
根据 doxygen 文档和此链接,PREDEFINED 和 EXPAND_AS_DEFINED 有不同的用途。我理解 EXPAND_AS_DEFINED 用于选择性地扩展给定的宏“因为它是在源代码中定义的”,因此得名,而 PREDEFINED 在这里赋予 Doxygen 宏的含义。
我正在使用 Doxygen 来记录 C++ 代码,并且正在为代码编写大量 Doxygen 文档。在一个地方,我在代码中制作了一个组列表,并希望它显示如下:
我的文档来源如下所示:
- @ref CM:控制一切的模块
- @ref SM:作为@CM 从属的模块
但是,问题:Doxygen 似乎将参考名称读取为CM:,而不是CM,因此找不到参考。所以,不知何故,我需要告诉 Doxygen 参考名称在哪里结束。(例如,如果我使用 Bash,并且想要回显带有“s”作为后缀的变量字符串,我会使用echo "${NOUN}s".)
作为一种解决方法,我可以在名称和后面的冒号之间添加一个空格,但这会使生成的文档更难阅读,我想避免它。
在Special Commands 下,Doxygen 手册包含以下听起来充满希望的信息:
一些命令有一个或多个参数。每个参数都有一定的范围:
- 如果使用 <sharp> 大括号,则参数是单个单词。
- 如果使用(圆)大括号,则参数将扩展到找到命令的行的末尾。
- 如果使用 {curly} 大括号,则参数会扩展到下一段。段落由空行或节指示符分隔。
好的,这一切都很好,但是文档没有说,我也想不通,这些大括号应该放在哪里。仅围绕争论?围绕整个命令和参数?两者都不起作用,我想不出一个可行的替代方案。
那么,我如何指示 Doxygen 引用名称的结尾?如果大括号是答案,它们会去哪里?
为 Doxygen 处理编写的代码有这样的行是正常的。
int myVariable; ///< description of myVariable
Run Code Online (Sandbox Code Playgroud)
但是,当 Visual Studio(例如 VS 2015)使用这些 Doxygen 注释准备的代码时,其工具提示信息myVariable将显示
XML comment contains invalid XML: Whitespace is not allowed at this location.
问题似乎是紧跟在“//”之后的“<”的存在。这似乎被 Visual Studio 解释为信号(格式不正确)的 XML 内容。但是,此组合与“<”一起存在,以向 Doxygen 发出信号,表明该注释适用于该行上的前一项,而不是后一项。
假设我们正在讨论已经遵循 Doxygen 约定的现有代码体。很多地方已经这样写了。
有没有办法调整或教授或设置 Visual Studio,以便它将此类注释视为前一项的正常文档注释,以便它们出现在这些项目的工具提示中?
一个后续问题:
所以,对于参数,我们使用 @param
@param my_param the quick brown fox takes this parameter over the lazy dog
Run Code Online (Sandbox Code Playgroud)
然后我们可以使用它来引用它@p:
@param my_other_param this is completely different from @p my_param , you know!
Run Code Online (Sandbox Code Playgroud)
现在,对于模板参数,我将替换@param为@tparam. 应该用什么代替@p?
我的 Doxyfile 中的 TAGFILES 不会链接到外部文档。
在'doxygen -g'生成的配置文件中
~/tests/libd/Doxyfile
Run Code Online (Sandbox Code Playgroud)
以下几行从原来的修改为:
PROJECT_NAME = "libd"
GENERATE_LATEX = NO
GENERATE_TAGFILE = libd.tag
Run Code Online (Sandbox Code Playgroud)
运行“doxygen”会生成一个文件
~/tests/libd/libd.tag
Run Code Online (Sandbox Code Playgroud)
和一个包含一些 html 页面的子目录
~/tests/libd/html/
Run Code Online (Sandbox Code Playgroud)
在另一个目录中,另一个由 'doxygen -g' 生成的配置文件
~/tests/app/Doxyfile
Run Code Online (Sandbox Code Playgroud)
从原来的修改为:
PROJECT_NAME = "app"
GENERATE_LATEX = NO
TAGFILES = ../libd/libd.tag=../../libd/html
Run Code Online (Sandbox Code Playgroud)
运行“doxygen”会产生一个包含一些 html 页面的子目录
~/tests/app/html/
Run Code Online (Sandbox Code Playgroud)
但是,上述 html 页面不包含指向“libd” html 的链接。将 TAGFILES 行更改为
TAGFILES =~/tests/libd/libd.tag=~/tests/libd/html
Run Code Online (Sandbox Code Playgroud)
或者
TAGFILES = ../libd/libd.tag=../libd/html
Run Code Online (Sandbox Code Playgroud)
没有任何区别。
在网上搜索了很多,但找不到任何线索。是我的 doxygen 版本问题吗?还是我的配置错误?请指教。在此先感谢您的帮助。
我目前正在使用 Doxygen 和 Graphviz 为网站生成文档。该网站有许多 Javascript 文件,函数调用会传递到多个文件。当前生成的调用图被限制在每个单独的文件中。
有没有办法生成跨越多个文件的函数的调用图?我正在考虑使用cat连接我想要调用图跨度的所有文件,然后将其作为参数传递给 Graphviz 或 Doxygen 生成器,但我无法找到通过命令行生成调用图的方法。
如果我有以下两个文件main.js和sub.js:
mainFunc(){
subFunc();
}
Run Code Online (Sandbox Code Playgroud)
subFunc(){
sayHi("hello");
}
sayHi(msg){
console.log(msg);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够生成如下所示的调用图:
[mainFunc] -> [subFunc] -> [sayHi]
即使它不是自动化的。看起来像这样的命令就可以了:
cat main.js sub.js | doxygen -makecall "mainFunc" -o myGraph.svg
使用 doxygen 可以static通过设置EXTRACT_STATIC为YES. 但是,有没有办法在文档中只包含一些特定的静态函数?
我设法通过重新定义static关键字并在我希望包含在文档中的函数的声明中使用此定义来愚弄 doxygen ,但这并不是一个很好的方法。
#define STATIC static
STATIC void foo(void);
Run Code Online (Sandbox Code Playgroud) 在尝试使 doxygen 工作时解决了一些初始问题后,我在遵循doxygen 安装教程时偶然发现了下一个错误。
到目前为止什么工作:(
git clone https://github.com/doxygen/doxygen.git
cd doxygen
mkdir build
cd build
sudo apt-get install flex它丢失了所以我之前必须安装它cmake)
sudo apt-get install bison(它丢失了所以我之前必须安装它cmake)
cmake -G "Unix Makefiles" ..
make
但是后来make install我收到以下错误:
test@test-VirtualBox:~/doxygen/build$ make install
[ 1%] Built target md5
[ 19%] Built target qtools
[ 24%] Built target vhdlparser
[ 92%] Built target _doxygen
[ 98%] Built target doxycfg
[100%] Built target doxygen
Install the project...
-- Install configuration: …Run Code Online (Sandbox Code Playgroud) 我有一个相当普遍的问题:我最近在 C/C++ 代码中看到许多#defines 被注释为“/*< ... */”,例如:
#define ARRSIZE(x) (sizeof(x)/sizeof(x[0])) /*< macro to determine the size of an array */
Run Code Online (Sandbox Code Playgroud)
我个人只在定义的评论中看到这一点,谷歌搜索也没有回答我的问题。那有什么意义吗?这只是常见的做法还是来自 Doxygen?还是有其他原因?