Chciałbym stworzyć pakiet Rusta zawierający zarówno bibliotekę wielokrotnego użytku (w której zaimplementowana jest większość programu), jak i plik wykonywalny, który z niej korzysta.
Zakładając, że nie pomyliłem żadnej semantyki w systemie modułów Rusta, jak powinien Cargo.toml
wyglądać mój plik?
rust
rust-cargo
Andrew Wagner
źródło
źródło
cargo build --verbose
, zobaczysz je wrustc
wierszu poleceń.[[bin]]
jest tablicą tabel? Dlaczego używać,[[bin]]
a nie[bin]
? Wydaje się, że nie ma żadnej dokumentacji na ten temat.Możesz również po prostu umieścić źródła binarne,
src/bin
a pozostałe źródłasrc
. Możesz zobaczyć przykład w moim projekcie . Nie musiszCargo.toml
w ogóle modyfikować swojego , a każdy plik źródłowy zostanie skompilowany do postaci binarnej o tej samej nazwie.Konfiguracja drugiej odpowiedzi jest następnie zastępowana przez:
Cargo.toml
src / lib.rs
src / bin / mybin.rs
I wykonaj to:
Dodatkowo możesz po prostu utworzyć plik,
src/main.rs
który będzie używany jako plik wykonywalny defacto. Niestety jest to sprzeczne zcargo doc
poleceniem:źródło
extern crate example;
Nie jest to wymagane, rdzy 2018 można bezpośrednio pisaćuse example::really_complicated_code;
i korzystać z funkcji bez nazywania zakresAlternatywnym rozwiązaniem jest nie próbowanie upychania obu rzeczy w jednym pakiecie. W przypadku nieco większych projektów z przyjaznym plikiem wykonywalnym bardzo przyjemnie jest używać obszaru roboczego
Tworzymy projekt binarny, który zawiera w sobie bibliotekę:
Cargo.toml
Używa
[workspace]
klucza i zależy od biblioteki:src / main.rs
mylibrary / src / lib.rs
I wykonaj to:
Ten program ma dwie duże korzyści:
Plik binarny może teraz używać zależności, które mają zastosowanie tylko do niego. Na przykład możesz dołączyć wiele skrzynek, aby poprawić wygodę użytkownika, takich jak parsery wiersza poleceń lub formatowanie terminala. Żadne z nich nie „zainfekuje” biblioteki.
Przestrzeń robocza zapobiega zbędnym kompilacjom każdego składnika. Jeśli uruchomimy
cargo build
zarówno w katalogu, jakmylibrary
ithe-binary
, biblioteka nie zostanie zbudowana dwukrotnie - jest współdzielona między oba projekty.źródło
main.rs
, co jest w środku , następnie dzielę to na moduły, gdy robi się większe, w końcu dzielę się,src/bin
gdy jest tylko trochę większy, a następnie przechodzę do obszaru roboczego, gdy zaczynam intensywnie ponownie wykorzystywać podstawową logikę.cargo test
Kompiluje się i działa dobrze, ale wydaje się, że ignoruje testy jednostkowe w lib.rscargo test --all
Możesz umieścić
lib.rs
imain.rs
do folderu źródeł razem. Nie ma konfliktu, a ładunek zbuduje obie rzeczy.Aby rozwiązać konflikt dokumentacji, dodaj do
Cargo.toml
:źródło