app
/ \
codec net
\ / \
base util
依存の向きは上から下。辺の種類は以下のとおり。
| 辺 | 種別 | 意図 |
|---|---|---|
app → codec, net |
private | 実行ファイルの依存。外へ供給するものが無い |
codec → base |
public | base の公開部分が app まで届く |
net → base |
public | ダイヤモンドのもう一辺 |
net → util |
private | util は app から見えてはならない |
app は base に直接依存していないが、
codec の公開依存を通じて <base/base.h> を include できるBASE_API は codec と net の2経路で
app へ届く。defines の併合は error_on_conflict だが、同一の値が
同一の出所から2度来ただけなので誤検知してはならないinclude/ に置く。併合が相対パスだけで重複を判定すると、
1つを残して全て消える(実際にこの形で発覚した欠陥である)net の private.deps である util の公開定義は
app に届いてはならない。private.defines も同様net 自身のコンパイルでは util が見えていることtest ターゲットを持ち、
自分の公開ヘッダだけで組み上がること主張の大半は C 側の #error と終了状態で書いてある。ビルドシステムの利用者が
実際に踏む経路と同じ形で確かめるためであり、期待値を Rust 側と二重に持たないためでもある。
sum=5 encode=5 port=1024 opt=0
opt は構成で変わる(--config=release なら 1)。