2016-04-13 10 views
23

Chciałbym wykonać projekt z daemon i client, łącząc za pośrednictwem gniazda unix.Jak mogę skompilować wiele plików binarnych za pomocą Cargo?

A client i daemon wymaga dwóch plików binarnych, więc jak mogę powiedzieć, aby Cargo zbudować dwa cele z dwóch różnych źródeł?

Aby dodać trochę fantazji, chciałbym mieć library dla głównej części daemon i po prostu mieć plik binarny do zawijania wokół niego i komunikowania się przez gniazda.

Tak, mamy tego rodzaju drzewa ARCHITEKTURA:

├── Cargo.toml 
├── target 
| └── debug 
|  ├── daemon 
│  └── client 
└── src 
    ├── daemon 
    │ ├── bin 
    │ │ └── main.rs 
    │ └── lib 
    │  └── lib.rs 
    └── client 
     └── bin 
      └── main.rs 

mogę zrobić jeden plik wykonywalny, który zarządza zarówno obawy, ale to nie jest to, co chcę zrobić, chyba że jest to bardzo dobra praktyka.

+0

Bardzo istotne: [pakiet Rust z biblioteką i plikiem binarnym?] (Http://stackoverflow.com/q/26946646/155423). – Shepmaster

+0

W odpowiedzi na odpowiedź [Dognert's] (http://stackoverflow.com/questions/36604010/how-can-i-build-multiple-binaries-with-cargo/36604610#36604610) odpowiadają na wszystkie pytania, które otrzymałem. Dziękuję bardzo! – RallionRl

Odpowiedz

35

Można określić wiele plików binarnych przy użyciu [[bin]], jak wspomniano here:

[[bin]] 
name = "daemon" 
path = "src/daemon/bin/main.rs" 

[[bin]] 
name = "client" 
path = "src/client/bin/main.rs" 

Wskazówka: Jeśli zamiast umieścić te pliki w src/bin/daemon.rs i src/bin/client.rs, dostaniesz dwa pliki wykonywalne nazwie daemon i client jako ciężarowy kompiluje wszystko pliki w src/bin na pliki wykonywalne o tej samej nazwie automatycznie. Musisz podać nazwy i ścieżki, jak w powyższym urywku, tylko jeśli nie stosujesz się do tej konwencji.

+0

Spojrzałem na dokumentację Cargo, ale nic nie widzę, możesz podać dane wyjściowe do przechowywania plików binarnych? na przykład pathTo: "/ some/path" Przepraszam za mój angielski. –

+0

jeśli uważasz, że lepiej jest utworzyć pytanie na ten temat, mogę to zrobić bez problemu, może być łatwiej znaleźć innych z tym samym pytaniem? –

+0

@AngelAngel, który chcesz dostosować ścieżkę wyjściową? Domyślnie będzie przechowywany w 'target/debug/$ name' gdzie' $ name' jest 'name' podaną w Cargo.toml. – Dogbert