关于自动生成C++文档:
在阅读了如何使用sphinx之后,你应该看看breathe:
Breathe提供了Sphinx和Doxygen文档系统之间的桥梁。
它是一种将Doxygen信息包含在由Sphinx生成的一组文档中的简单方法。目标是为那些喜欢使用Sphinx但使用除Python以外的语言的人们提供一个类似于autodoc的支持。该系统依赖于Doxygen的xml输出。
因此,您还需要遵循Doxygen的注释格式,甚至设置一个Doxygen项目。但我尝试过这个方法,虽然最初的设置需要花费点时间,但实际上效果非常好。下面是我们的CMakeLists.txt
的摘录,这可能会给你一个关于Sphinx和Doxygen如何协同工作的想法:
macro(add_sphinx_target TARGET_NAME BUILDER COMMENT_STR)
add_custom_target(${TARGET_NAME}
COMMAND sphinx-build -b ${BUILDER} . sphinx/build/${BUILDER}
WORKING_DIRECTORY docs
DEPENDS doxygen
COMMENT ${COMMENT_STR}
)
endmacro(add_sphinx_target)
add_custom_target(doxygen
COMMAND doxygen docs/doxygen.conf
COMMENT "Build doxygen xml files used by sphinx/breathe."
)
add_sphinx_target(docs-html
html
"Build html documentation"
)
在初始设置后,实际上归结为以下几点:
- 使用
doxygen path/to/config
生成 Doxygen 文档。
cd
到包含 Sphinx 配置文件的目录。
- 使用
sphinx-build . path/to/output
生成 Sphinx 文档。
关于 C++ 领域:
Sphinx 不仅是一个自动生成文档系统。我建议你看看 示例 (并考虑到Sphinx官网是由Sphinx reST代码编写而成)。尤其是单击许多Sphinx生成页面上的 Show Source
链接。
如果无法自动为项目生成文档,则必须手动编写文档。基本上,Sphinx 是一个将 reST 编译为任何格式(如 LaTeX、HTML)的编译器。因此,你可以编写任意文本,但优点在于它具有大量指令,用于记录不同语言的源代码。每种语言都有自己的领域(前缀或命名空间),以分隔不同语言的命名空间。例如,可以使用以下方式记录 Python 函数:
.. py:function:: Timer.repeat([repeat=3[, number=1000000]])
Does something nasty with timers in repetition
(来源)
我可以使用cpp域来做同样的事情:
.. cpp:function:: bool namespaced::theclass::method(int arg1, std::string arg2)
Describes a method with parameters and types.
(来源)
如果您想使用Sphinx而不是Doxygen+Breathe来记录您的C++项目,那么您将需要自己编写重新组织的文本文件。这也意味着您将文档与源代码分开,这可能是不理想的。
我希望这能帮助您了解一些情况。为了进一步阅读,我强烈建议您详细阅读Sphinx教程和文档,直到您真正理解它所做的事情。