在不启用 EXTRACT_ALL 的情况下使用 Doxygen 记录枚举 class 值

Document enum class values using Doxygen without enabling EXTRACT_ALL

如果不设置 EXTRACT_ALL,我无法显示枚举值 类 的文档。 preserve、t运行cate 和 append 的注释不存在。枚举本身已记录在案。如果我启用 EXTRACT_ALL 我会得到一个列表。

我的代码是:

namespace grimoire
{

...

/// @brief Behaviour of function open_for_write for already existing files.
/// @see open_for_write()
enum class OpenMode
{
    preserve = std::ofstream::out,   /// Already existing file aren't opened.
    truncate = std::ofstream::trunc, /// Discard existing contents.
    append   = std::ofstream::app    /// Append to existing contents.
};

...

}

我正在使用 CMake 来 运行 Doxygen:

#set(DOXYGEN_EXTRACT_ALL YES)
doxygen_add_docs(
    docs
    "${CMAKE_CURRENT_SOURCE_DIR}/include/grimoire"
    "${CMAKE_CURRENT_SOURCE_DIR}/src")

编辑:

它甚至不适用于经典枚举且没有显式值。看来跟我的设置有关

已解决:

我必须向封闭的命名空间添加注释。 Doxygen 提取了枚举本身和其他东西,如函数和 类 在该命名空间内,但没有提取枚举条目。

Doxygen 并不总是选择一个枚举,这可以通过使用 \file 命令来克服。 此外,您在 定义之后记录了枚举值,这意味着您不应使用 /// 而应使用 ///<

所以有限的例子看起来像:

/// \file


/// @brief Behavior of function open_for_write for already existing files.
/// @see open_for_write()
enum class OpenMode
{
    preserve = std::ofstream::out,   ///< Already existing file aren't opened.
    truncate = std::ofstream::trunc, ///< Discard existing contents.
    append   = std::ofstream::app    ///< Append to existing contents.
};

编辑: 根据 OP 的回答,给定的解决方案并不完整,因为原始问题嵌入在命名空间中。为了能够在这种情况下显示枚举,仅添加 \file 是不够的,但还需要记录命名空间。所以一个更完整的例子:

/// \file

/// The namespace documentation
namespace NS
{
  /// @brief Behavior of function open_for_write for already existing files.
  /// @see open_for_write()
  enum class OpenMode
  {
      preserve = std::ofstream::out,   ///< Already existing file aren't opened.
      truncate = std::ofstream::trunc, ///< Discard existing contents.
      append   = std::ofstream::app    ///< Append to existing contents.
  };
};