1

いくつかの実行可能ファイルと静的ライブラリをビルドする zig プロジェクトをセットアップしたいと考えています。これは私が念頭に置いている構造です:

build.zig
scr/
    exe0/
        depends on lib0, lib1
    exe1/
        depends on lib1
    lib0/
    lib1/

それを行う1つの方法は、次のようなものを使用して、単一のbuild.zigでこれらすべてを記述することだと思います:

const lib0 = b.addStaticLibrary("lib0", "src/lib0/index.zig");
const lib1 = b.addStaticLibrary("lib1", "src/lib1/index.zig");

const exe0 = b.addExecutable("exe0", "src/exe0/main.zig");

exe0.linkLibrary(lib0);
exe0.linkLibrary(lib1);

const exe1 = b.addExecutable("exe1", "src/exe1/main.zig");
exe1.linkLibrary(lib1);

それは良い方法ですか?exeとlibsを別々のファイルに記述することは可能ですか?その場合、それらをどのようにリンクしますか?

編集:静的ライブラリは実際には必要なく、代わりにパッケージを実際に使用できると思います。これはもっとジグのようになると思います。ただし、静的ライブラリのアプローチにはまだ興味があります。

4

1 に答える 1

2

静的ライブラリ アプローチを使用できるようにするには、C ABI を使用するようにパブリック インターフェイス全体を明示的に設計する必要があります。これはかなり制限的です (たとえば、API 境界で直接スライスを使用することさえできません)。この方法で何らかの利点が得られない場合は、パッケージを使用するか、より簡単に言えば、@import().相対パス。

build.zig ファイルの分割について: 必要に応じて、必要に応じて、各プロジェクト内にビルダー関数を作成して、それぞれが独自の詳細を定義できるようにすることができます。しかし、私は人々がまだ野生でそれをしているのを見たことがありません.

いくつかの依存関係を結びつける強力な build.zig ファイルの例が必要な場合は、Zig 対決をご覧ください: https://github.com/zig-community/Zig-Showdown

于 2021-07-15T19:38:10.733 に答える