mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 12:59:04 +00:00
Add some basic examples for the Zig Build System.
This commit is contained in:
parent
6850e54cc0
commit
eb80cc2b9e
@ -8550,7 +8550,8 @@ fn foo(comptime T: type, ptr: *T) T {
|
||||
{#header_open|opaque#}
|
||||
<p>
|
||||
{#syntax#}opaque {}{#endsyntax#} declares a new type with an unknown (but non-zero) size and alignment.
|
||||
It can have declarations like structs, unions, or enums.
|
||||
It can contain declarations the same as {#link|structs|struct#}, {#link|unions|union#},
|
||||
and {#link|enums|enum#}.
|
||||
</p>
|
||||
<p>
|
||||
This is typically used for type safety when interacting with C code that does not expose struct details.
|
||||
@ -9626,9 +9627,99 @@ test "assert in release fast mode" {
|
||||
</p>
|
||||
{#header_close#}
|
||||
{#header_open|Zig Build System#}
|
||||
<p>TODO: explain purpose, it's supposed to replace make/cmake</p>
|
||||
<p>TODO: example of building a zig executable</p>
|
||||
<p>TODO: example of building a C library</p>
|
||||
|
||||
<p>Simple programs can be built with {#syntax#}zig
|
||||
build-exe{#endsyntax#} and {#syntax#}zig build-lib{#endsyntax#},
|
||||
but running those commands manually gets tedious and error
|
||||
prone. Zig's build system lets you keep all the command line
|
||||
switches and build modes in one place. It has no external
|
||||
dependencies, so Zig code can be built on any platform without
|
||||
installing more programs.</p>
|
||||
<p>To use the build system, run
|
||||
<code class="shell">$ zig build [command]</code>
|
||||
where {#syntax#}[command]{#endsyntax#} is an optional target,
|
||||
configured by your build.zig file. There is more detail
|
||||
on <a href="https://github.com/ziglang/zig/wiki/Zig-Build-System">the
|
||||
wiki</a> but here are some example build.zig files to get you
|
||||
started:</p>
|
||||
|
||||
{#header_open|Building a Zig Executable#}
|
||||
<p>This <code>build.zig</code> file is automatically generated
|
||||
by <code>zig init-exe</code>.</p>
|
||||
{#code_begin|syntax|build#}
|
||||
const Builder = @import("std").build.Builder;
|
||||
|
||||
pub fn build(b: *Builder) void {
|
||||
// Standard target options allows the person running `zig build` to choose
|
||||
// what target to build for. Here we do not override the defaults, which
|
||||
// means any target is allowed, and the default is native. Other options
|
||||
// for restricting supported target set are available.
|
||||
const target = b.standardTargetOptions(.{});
|
||||
|
||||
// Standard release options allow the person running `zig build` to select
|
||||
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
||||
const mode = b.standardReleaseOptions();
|
||||
|
||||
// This line tells the Zig build system where to find the file
|
||||
// that contains main and what to call the executable.
|
||||
const exe = b.addExecutable("main", "src/main.zig");
|
||||
exe.setTarget(target);
|
||||
exe.setBuildMode(mode);
|
||||
exe.install();
|
||||
|
||||
const run_cmd = exe.run();
|
||||
run_cmd.step.dependOn(b.getInstallStep());
|
||||
|
||||
// This will be executed by "zig build run"
|
||||
const run_step = b.step("run", "Run the app");
|
||||
run_step.dependOn(&run_cmd.step);
|
||||
}
|
||||
{#code_end#}{#header_close#}
|
||||
|
||||
{#header_open|Building a C library#}
|
||||
{#code_begin|syntax#}
|
||||
const Builder = @import("std").build.Builder;
|
||||
|
||||
pub fn build(b: *Builder) void {
|
||||
const mode = b.standardReleaseOptions();
|
||||
// Add a target that generates libbadmath, with no Zig source files.
|
||||
const lib = b.addStaticLibrary("badmath", null);
|
||||
lib.setBuildMode(mode);
|
||||
// This particular library exists entirely in src/lib.c.
|
||||
lib.addCSourceFile("src/lib.c", &[_][]const u8{
|
||||
"-Wall",
|
||||
"-Wextra",
|
||||
"-Werror",
|
||||
});
|
||||
// libbadmath.a will be put in this directory, instead of only
|
||||
// living in zig-cache.
|
||||
lib.setOutputDir("obj");
|
||||
lib.install();
|
||||
}
|
||||
{#code_end#}
|
||||
{#header_close#}
|
||||
|
||||
{#header_open|Extending a C library#}
|
||||
{#code_begin|syntax#}
|
||||
const Builder = @import("std").build.Builder;
|
||||
|
||||
pub fn build(b: *Builder) void {
|
||||
const mode = b.standardReleaseOptions();
|
||||
// This line tells the build system to make a static library
|
||||
// called "add" using source from "src/main.zig".
|
||||
const lib = b.addStaticLibrary("add", "src/main.zig");
|
||||
lib.setBuildMode(mode);
|
||||
lib.force_pic = true;
|
||||
// Include the compiler's runtime environment in the static library.
|
||||
lib.bundle_compiler_rt = true;
|
||||
|
||||
var main_tests = b.addTest("src/main.zig");
|
||||
main_tests.setBuildMode(mode);
|
||||
|
||||
const test_step = b.step("test", "Run library tests");
|
||||
test_step.dependOn(&main_tests.step);
|
||||
}
|
||||
{#code_end#}{#header_close#}
|
||||
{#header_close#}
|
||||
{#header_open|C#}
|
||||
<p>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user