質問1の回答
普通ライブラリ開発者様は一般的にどのような方法を取られるんでしょうか。
クレートのテストに.dllが必要になるというのは珍しいことだと思いますので、一般的な方法はなさそうです。それぞれのクレートの作者さまが、それぞれ工夫しているように思えます。
cdylibを扱うクレートで私が知っているものについて、どうしているのか調べてみました。
libloadingクレート
- Cargo標準の
tests
ディレクトリー内に、どこか他の場所で作成した.dllを置いている。
tests/windows.rs
ファイル内の#[test]
指定の関数から.dllを使用している。
tests/windows.rs
ファイルの先頭に#![cfg(windows)]
と書くことで、Windows環境でのみテストが実行されるようにしている。
こうすることで、Windows環境で単にcargo test
とすればテストを実行できます。
abi-stableクレート
GitHub Actionsのファイルにコマンドを書く方法ですと、手元の環境でテストを実行したいときは、手でいちいちcargo run
などのコマンドを入れなければならないので不便かなと感じました。もし自分でやるなら、(私はLinux/macOS環境を使用しているので)Gnu MakeなどのMakefile
にcargo run
などのコマンドを書いて、make test
のように実行できるようにすると思います。
質問2の回答
例えばライブラリクレートの中に新しいテスト用のクレートを作ったとすると、それは他人がライブラリを使用する際に一緒にダウンロードされるのでしょうか?
Cargo.toml
のpackage
セクションでexclude
を指定することで、それにマッチするディレクトリーやファイルをパッケージから除外できます。なお、ドキュメントによると、サブパッケージ(Cargo.toml
ファイルが含まれているサブディレクトリー)は自動的に除外されるそうです。
パッケージに何が含まれるか確認するにはcargo package
コマンドを実行します。target/package
ディレクトリーにgzipで圧縮されたtar形式のパッケージが作られますので(拡張子は.crate
)、それを解凍して中のファイルを見てみることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/25 01:26