मैं कार्गो के साथ कई बायनेरिज़ कैसे बना सकता हूं?


104

मैं एक daemonऔर एक के साथ एक परियोजना बनाना चाहूंगा client, एक यूनिक्स सॉकेट के माध्यम से कनेक्ट करना।

A clientऔर daemonदो बायनेरिज़ की आवश्यकता है, इसलिए मैं Cargoदो अलग-अलग स्रोतों से दो लक्ष्य बनाने के लिए कैसे कहूं ?

थोड़ा सा फंतासी जोड़ने के लिए, मैं इसके libraryमुख्य भाग के लिए होना चाहूंगा daemon, और बस इसके चारों ओर लपेटने और सॉकेट के साथ संवाद करने के लिए एक बाइनरी होना चाहिए।

तो, हमारे पास इस तरह की पेड़ वास्तुकला है:

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

मैं एक निष्पादन योग्य बना सकता हूं जो दोनों चिंताओं का प्रबंधन करता है, लेकिन यह वह नहीं है जो मैं करना चाहता हूं, जब तक कि यह बहुत अच्छा अभ्यास न हो।



डॉगर्ट के उत्तर के पूरक में , मुझे मिले सभी सवालों के जवाब देते हैं। आपका बहुत बहुत धन्यवाद!
RallionRl

जवाबों:


137

आप यहां[[bin]] बताए अनुसार कई बायनेरिज़ को निर्दिष्ट कर सकते हैं :

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

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

युक्ति: यदि आप के बजाय में इन फ़ाइलों को डाल दिया src/bin/daemon.rsऔर src/bin/client.rs, आप नाम के दो निष्पादनयोग्य मिलेगा daemonऔर clientकार्गो के रूप में में सभी फाइलों को संकलित करता है src/binस्वचालित रूप से एक ही नाम के साथ निष्पादनयोग्य में। आपको ऊपर दिए गए स्निपेट में नाम और रास्ते निर्दिष्ट करने की आवश्यकता है, यदि आप इस सम्मेलन का पालन नहीं करते हैं।


मैंने प्रलेखन कार्गो को देखा है, लेकिन मैं कुछ भी नहीं देख सकता हूं, आप बाइनरी को स्टोर करने के लिए आउटपुट निर्दिष्ट कर सकते हैं? उदाहरण के लिए pathTo: "/ some / path" मुझे अपनी अंग्रेजी के लिए खेद है।
एंजल एंजल

अगर आपको लगता है कि इस बारे में कोई प्रश्न बनाना बेहतर है, तो मैं इसे बिना किसी समस्या के कर सकता हूं, हो सकता है कि एक ही प्रश्न के साथ दूसरों को खोजना आसान हो?
एंजेल एंजल

@AngelAngel क्या आप आउटपुट पथ को अनुकूलित करना चाहते हैं? डिफ़ॉल्ट रूप से यह में संगृहीत किया जाएगा target/debug/$nameजहां $nameहै nameआप Cargo.toml में निर्दिष्ट करें।
डॉगबर्ट

मैं बस सोच रहा था कि क्या आप कह सकते हैं कि बाइनरी को डिफ़ॉल्ट के अलावा कहीं और कैसे स्थापित किया जाए। $ नाम में एक कॉपी और दूसरे रास्ते में एक और कॉपी। ऐसा नहीं है कि यह तुच्छ है, बस जिज्ञासु, आपके समय के लिए धन्यवाद।
एंजेल एंजल

@AngelAngel मुझे लगता है कि आप cargo installकमांड की तलाश कर रहे हैं । के आउटपुट को पढ़ने की कोशिश करें cargo help install
डॉगबर्ट

18

दूसरा तरीका कार्यक्षेत्र सुविधा का उपयोग करना है । यह इस तथ्य के कारण अधिक लचीलापन प्रदान करेगा कि हमारे पास एक से अधिक पुस्तकालय हो सकते हैं। उदाहरण परियोजना संरचना:

.
├── Cargo.toml
├── cli
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── core
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── daemon
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── gui
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── rpc
    ├── Cargo.toml
    └── src
        └── lib.rs

जड़ की सामग्री Cargo.toml:

[workspace]
members = ["cli", "core", "daemon", "gui", "rpc"]

1
मुझे यह काम करने के लिए नहीं मिला। मुझे src / फ़ोल्डर में बाइनरी जंग स्रोत को स्थानांतरित करना था और दूसरे लक्ष्य को निर्दिष्ट करना था [[bin]]। क्या आप इस बारे में अधिक जानकारी दे सकते हैं कि आपने इसे काम करने के लिए क्या किया? मैं निम्नलिखित त्रुटि प्राप्त कर रहा था: use ::engine::RuleEngine; could not find engine in {{root}}
केनी बाम्ब्रिज

@KennyBambridge मैंने थोड़ी देर के लिए जंग पर काम नहीं किया है। IIRC जब मैंने यह उत्तर बनाया है तो मैंने अपने स्थानीय मशीन पर कोशिश की और यह उद्देश्य के अनुसार काम करता है।
अल्टिमावेपॉन

@KennyBambridge आपको कार्गो में निर्भरता के रूप में अन्य कार्यस्थानों में टोकरे को जोड़ना होगा जहां आप उनका उपयोग करना चाहते हैं।
सीज़र

1

एक और प्रारूप हो सकता है कि क्रेट्स.आईओ स्रोत कोड को दोहराया जाए ने किया है, अगर आपके पास एक बड़ी परियोजना है, तो कुछ इस तरह है:

मुख्य पुस्तकालय src में, अपने निष्पादनयोग्य के साथ एक बिन फ़ोल्डर के साथ। फिर अपने निष्पादक से अपने मुख्य पुस्तकालय टोकरे को कॉल करें।

इस तरह से आप पुस्तकालय को चीजों को खोजने के लिए बहुत आसान केंद्रीकृत कर रहे हैं क्योंकि यह कैश है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.