You can do something similar using the build system. This requires some boilerplate code to do the option handling. Following the tutorial on https://zig.news/xq/zig-build-explained-part-1-59lf for the build system and https://ziggit.dev/t/custom-build-options/138/8 for the option handling:
- Create a separate file called
build.zig
that contains a function build()
:
const std = @import("std");
pub fn build(b: *std.build.Builder) !void {
const build_options = b.addOptions();
// add command line flag
// and set default value
build_options.addOption(bool, "sideways", b.option(bool, "sideways", "print sideways") orelse false);
// set executable name and source code
const exe = b.addExecutable("hello", "hello.zig");
exe.addOptions("build_options", build_options);
// compile and copy to zig-out/bin
exe.install();
}
- Use the option for conditional compilation in a separate file
hello.zig
using @import("build_options")
:
const std = @import("std");
pub fn main() !void {
const print_sideways = @import("build_options").sideways;
const stdout = std.io.getStdOut().writer();
if (print_sideways) {
try stdout.print("Sideways Hello, {s}!\n", .{"world"});
} else {
try stdout.print("Regular Hello, {s}!\n", .{"world"});
}
}
- Compile with:
zig build -Dsideways=true
- Executing
zig-out/bin/hello
gives the following output:
Sideways Hello, world!