计算机系统应用教程网站

网站首页 > 技术文章 正文

zig编程语言快速入门——4.5 构建系统-生成文档

btikc 2024-09-12 11:51:03 技术文章 9 ℃ 0 评论

生成文档

Zig编译器带有自动生成文档的功能。这可以通过在zig build-{exe, lib, obj}或zig run命令中添加femit-docs来调用。这些文档被保存在./docs中,作为一个小型静态网站。

Zig的文档生成利用了doc注释,它类似于注释,使用///而不是//,以及前面的globals。

在这里,我们将把它保存为x.zig',然后用zig build-lib -femit-docs x.zig -target native-windows'为它建立文档。这里有一些东西需要注意:

  • 只有带有文档注释的公开内容才会出现
  • 可以使用空白的文档注释
  • 文档注释可以使用markdown的子集
  • 只有当编译器分析它们时,事情才会出现在生成的文档中;你可能需要强制分析以获得事情的出现。
const std = @import("std");
const w = std.os.windows;

///**打开一个进程**, 获得一个句柄. 
///[MSDN](https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess)
pub extern "kernel32" fn OpenProcess(
    ///[进程访问权限](https://docs.microsoft.com/en-us/windows/win32/procthread/process-security-and-access-rights)
    dwDesiredAccess: w.DWORD,
    ///
    bInheritHandle: w.BOOL,
    dwProcessId: w.DWORD,
) callconv(w.WINAPI) ?w.HANDLE;

///spreadsheet 位置
pub const Pos = struct{
    ///row
    x: u32,
    ///column
    y: u32,
};

pub const message = "hello!";

//用于强制分析,因为这些东西没有其他参考价值.
comptime {
    _ = OpenProcess;
    _ = Pos;
    _ = message;
}

//另一种方法是自动强制分析一切,但只在测试构建中:
test "Force analysis" {
    comptime {
        std.testing.refAllDecls(@This());
    }
}

使用build.zig时,可以通过在CompileStep上设置emit_docs字段为.emit来调用。我们可以创建一个生成文档的编译步骤,如下所示,然后用$ zig build docs来调用它.

const std = @import("std");

pub fn build(b: *std.build.Builder) void {
    const mode = b.standardReleaseOptions();

    const lib = b.addStaticLibrary("x", "src/x.zig");
    lib.setBuildMode(mode);
    lib.install();

    const tests = b.addTest("src/x.zig");
    tests.setBuildMode(mode);

    const test_step = b.step("test", "Run library tests");
    test_step.dependOn(&tests.step);

    //构建步骤来生成文档:
    const docs = b.addTest("src/x.zig");
    docs.setBuildMode(mode);
    docs.emit_docs = .emit;
    
    const docs_step = b.step("docs", "Generate docs");
    docs_step.dependOn(&docs.step);
}

这种生成方式是试验性的,在复杂的例子中经常失败。这被标准库文档所使用.

当合并错误集时,最左边的错误集的文档字符串优先于右边的。在这种情况下,C.PathNotFound的文档注释是A中提供的文档注释.

const A = error{
    NotDir,

    /// A doc comment
    PathNotFound,
};
const B = error{
    OutOfMemory,

    /// B doc comment
    PathNotFound,
};

const C = A || B;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表