কার্গো দিয়ে আমি কীভাবে একাধিক বাইনারি তৈরি করতে পারি?


94

আমি ইউনিক্স সকেটের সাথে সংযোগ স্থাপন করে একটি daemonএবং একটি দিয়ে একটি প্রকল্প তৈরি করতে চাই client

clientএবং daemonএকটিতে দুটি বাইনারি প্রয়োজন, সুতরাং আমি কীভাবে Cargoদুটি ভিন্ন উত্স থেকে দুটি লক্ষ্য তৈরি করতে বলব ?

কিছুটা কল্পনা যুক্ত করার জন্য, আমি libraryএর মূল অংশটির জন্য একটি চাই daemonএবং কেবল এটির চারপাশে মোড়ানো এবং সকেটের মাধ্যমে যোগাযোগের জন্য একটি বাইনারি রাখব।

সুতরাং, আমাদের কাছে এই জাতীয় গাছের আর্কিটেকচার রয়েছে:

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

আমি এমন একটি নির্বাহযোগ্য করতে পারি যা উভয় উদ্বেগকে পরিচালনা করে তবে আমি এটি করতে চাই না, যদি না এটি খুব ভাল অনুশীলন হয়।



ডগনার্টের উত্তরের পরিপূরক হিসাবে , তারা আমার কাছে থাকা সমস্ত প্রশ্নের উত্তর দেয়। আপনাকে অনেক ধন্যবাদ!
র্যালিয়ানআরএল

উত্তর:


125

আপনি এখানে[[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স্বয়ংক্রিয়ভাবে একই নামের এক্সেকিউটেবল মধ্যে। আপনি যদি এই কনভেনশনটি অনুসরণ না করেন তবে উপরের স্নিপেটের মতো আপনাকে নাম এবং পাথ নির্দিষ্ট করতে হবে।


আমি কার্গো ডকুমেন্টেশন দেখেছি, কিন্তু আমি কিছুই দেখতে পাচ্ছি না, আপনি বাইনারি সঞ্চয় করার জন্য আউটপুট নির্দিষ্ট করতে পারবেন? উদাহরণস্বরূপ পথটি: "/ কিছু / পথ" আমি আমার ইংরাজির জন্য দুঃখিত।
দেবদূত এঞ্জেল

আপনি যদি এই সম্পর্কে একটি প্রশ্ন তৈরি করা ভাল বলে মনে করেন, আমি কোনও সমস্যা ছাড়াই এটি করতে পারি, একই প্রশ্নযুক্ত অন্যকে খুঁজে পাওয়া সহজতর হতে পারে?
এঞ্জেল এঞ্জেল

আপনি কি আউটপুট পাথ কাস্টমাইজ করতে চান? ডিফল্টরূপে এটি সংরক্ষণ করা হবে target/debug/$nameযেখানে $nameহয় nameআপনি Cargo.toml মধ্যে উল্লেখ করুন।
ডগবার্ট

আমি কেবল অবাক হয়েছি আপনি যদি বলতে পারেন যে বাইনারিটির অনুলিপিটি ডিফল্ট ব্যতীত অন্য কোথাও ইনস্টল করবেন। $ নামে একটি অনুলিপি এবং অন্য পথে অন্য অনুলিপি। এটি তুচ্ছ নয়, কেবল কৌতূহলী, আপনার সময়ের জন্য ধন্যবাদ।
এঞ্জেল এঞ্জেল

@ অ্যাঞ্জেলএঞ্জেল আমি মনে করি আপনি cargo installকমান্ডটি সন্ধান করছেন। এর আউটপুট পড়ার চেষ্টা করুন cargo help install
ডগবার্ট

14

আরেকটি উপায় হ'ল ওয়ার্কস্পেস বৈশিষ্ট্যটি ব্যবহার করা । আমাদের একাধিক গ্রন্থাগার থাকতে পারে এই কারণে এটি আরও নমনীয়তা সরবরাহ করবে। প্রকল্প কাঠামোর উদাহরণ:

.
├── 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"]

4
আমি এই কাজ করতে পারেন না। আমাকে এসআরসি / ফোল্ডারে বাইনারি মরিচ উত্স সরাতে হয়েছিল এবং এর মধ্যে অন্য একটি লক্ষ্য নির্দিষ্ট করতে হয়েছিল [[bin]]। আপনি এটিকে কাজে লাগাতে কী করেছেন সে সম্পর্কে আরও বিশদ দিতে পারেন? আমি নিম্নলিখিত ত্রুটি পেয়েছিলাম: use ::engine::RuleEngine; could not find engine in {{root}}
কেনি বামব্রিজ

পছন্দ করেছেন আইআইআরসি যখন আমি এই উত্তরটি তৈরি করি তখন আমি আমার স্থানীয় মেশিনে চেষ্টা করেছিলাম এবং এটি যেমন ইচ্ছা তেমন কাজ করে।
আলটিমা উইপন

@ কেনেনিব্যামব্রিজ আপনি অন্যান্য ওয়ার্ক স্পেসে ক্রেট যুক্ত করতে হবে কার্গো.টমলে যেখানে আপনি সেগুলি ব্যবহার করতে চান সেখানে নির্ভরতা হিসাবে।
সিজার

1

আর একটি ফর্ম্যাট হ'ল ক্রেটস.আইও সোর্স কোডটি যা করেছে তা প্রতিলিপি করা হতে পারে , যদি আপনার কাছে একটি বিশাল প্রকল্প থাকে তবে এরকম কিছু:

আপনার এক্সিকিউটেবলের সাথে বিন ফোল্ডার সহ এসআরসি-র মূল লাইব্রেরি। তারপরে আপনার এক্সিকিউটেবলের থেকে আপনার প্রধান লাইব্রেরি ক্রেটে কল করুন।

আপনার লাইব্রেরিটি ক্যাশেড হওয়ার সাথে সাথে জিনিসগুলি সন্ধান করা এত সহজ কেন্দ্রীভূত is

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.