স্থানীয় অপ্রকাশিত ক্রেট কীভাবে ব্যবহার করবেন?


113

আমি একটি গ্রন্থাগার তৈরি করেছি:

cargo new my_lib

এবং আমি সেই লাইব্রেরিকে অন্য একটি প্রোগ্রামে ব্যবহার করতে চাই:

cargo new my_program --bin
extern crate my_lib;

fn main {
    println!("Hello, World!");
}

এটি কাজ করার জন্য আমার কী করা দরকার?

তারা একই প্রকল্প ফোল্ডারে নেই।

.
├── my_lib
└── my_program

আশা করি এটি উপলব্ধি করে।

আমি ভেবেছিলাম কার্গো গাইড অনুসারে আমি পথটিকে ওভাররাইড করতে সক্ষম হব , তবে এতে বলা আছে

স্থানীয় অপ্রকাশিত ক্রেট কীভাবে খুঁজে পাওয়া যায় তা আপনি কার্গোকে বলতে এই বৈশিষ্ট্যটি ব্যবহার করতে পারবেন না।

জাস্ট (1.3) এর সর্বশেষতম স্থিতিশীল সংস্করণটি ব্যবহার করার সময় এটি।

উত্তর:


150

আপনার এক্সিকিউটেবলের কার্গো.টমলে একটি নির্ভরতা বিভাগ যুক্ত করুন এবং পথটি নির্দিষ্ট করুন:

[dependencies.my_lib]
path = "../my_lib"

বা সমতুল্য বিকল্প টোমেল:

[dependencies]
my_lib = { path = "../my_lib" }

পরীক্ষা করে দেখুন নির্ভরতা উল্লেখ জন্য জাহাজী ডক্স আরো বিস্তারিত, কিভাবে একটি স্থানীয় পথের পরিবর্তে একটি Git সংগ্রহস্থলের ব্যবহার করতে চান জন্য।


8
কার্গো.টমলকে ক্রেটস.আইও.কে উল্লেখ করার সময় স্থানীয় ক্রেট নিজেকে ব্যবহার করার (বিকাশের জন্য) কোনও উপায় আছে যাতে অন্যরাও আমার কোডটি তৈরি করতে পারে?
ডেভিড রাউন্ডি

4
এই মুহূর্তে ডিফল্টভাবে সম্ভব নয়। তবে আপনি একটি স্থানীয় শাখায় কাজ করতে পারবেন, স্থানীয় নির্ভরতা রেফারেন্স (বা মিশ্র রেফারেন্স) দিয়ে Cargo.toml প্রতিস্থাপন করতে পারেন, এবং আপনি মার্জ করার আগে বা সময় নেওয়ার আগে, মূল কার্গো.টমল ফাইলটিতে ফিরে যেতে বা রাখতে পারবেন।
পল-সেবাস্তিয়ান মানোলে

7
@ ডেভিড রাউন্ডী আপনি যদি এখনও উত্তরটি খুঁজছেন তবে আপনি যা বলছেন তা করা এখন সম্ভব। আপনি উভয় versionএবং pathনির্ভরতার জন্য নির্দিষ্ট করতে পারেন এবং pathআপনি এটি প্রকাশ করার সময় অংশটি
কেটে

বিস্তারিত ডকুমেন্টেশন doc.rust-lang.org/cargo/references/…
ডেভিড জে।

4
এর gitবদলে কি একই কাজ করা সম্ভব version? এরকম কিছু my_lib = { path = "...", git = "..." }যাতে আমি বিকাশের সময় আমার স্থানীয় অনুলিপি এবং রিমোট গিট ব্যবহার করতে পারি যখন কেউ রেপো ক্লোন করে প্রোগ্রামটি সংকলনের চেষ্টা করে?
রুবেন কোস্টান্দায়ণ

0

আমি একটি সমতুল্য খুঁজছিলাম mvn install। যদিও এই প্রশ্নটি আমার মূল প্রশ্নের সদৃশ নয় তবে যে কেউ আমার মূল প্রশ্নটি দেখে হোঁচট খায় এবং এখানে লিঙ্কটি অনুসরণ করেছেন তিনি আরও একটি সম্পূর্ণ উত্তর খুঁজে পাবেন।

উত্তরটি "এর সমতুল্য নয় mvn installকারণ কার্গো.টমল ফাইলের পথে আপনাকে হার্ড-কোড করতে হয়েছে যা অন্য কারও কম্পিউটারে সম্ভবত ভুল হতে পারে তবে আপনি খুব কাছাকাছি যেতে পারেন।"

বিদ্যমান উত্তরটি কিছুটা সংক্ষিপ্ত এবং আসলে জিনিসগুলি কাজ করার জন্য আমাকে আরও কিছুটা সময় নিয়ে ঘুরতে হয়েছিল, সুতরাং এখানে আরও বিশদ বিবরণ:

/usr/bin/cargo run --color=always --package re5 --bin re5
   Compiling re5 v0.1.0 (file:///home/thoth/art/2019/radial-embroidery/re5)
error[E0432]: unresolved import `embroidery_stitcher`
 --> re5/src/main.rs:5:5
  |
5 | use embroidery_stitcher;
  |     ^^^^^^^^^^^^^^^^^^^ no `embroidery_stitcher` in the root

rustc --explain E0432 এই অনুচ্ছেদ অন্তর্ভুক্ত যা শেপমাস্টারের উত্তর ইকোস করে:

অথবা, আপনি যদি কোনও বাহ্যিক ক্রেট থেকে কোনও মডিউল ব্যবহার করার চেষ্টা করেন তবে আপনি extern crateঘোষণাটি মিস করতে পারেন (যা সাধারণত ক্রেটের মূলে স্থাপন করা হয়):

extern crate core; // Required to use the `core` crate

use core::any;

থেকে স্যুইচ useকরতে extern crateআমাকে এই করেছেন:

/usr/bin/cargo run --color=always --package re5 --bin re5
   Compiling embroidery_stitcher v0.1.0 (file:///home/thoth/art/2019/radial-embroidery/embroidery_stitcher)
warning: function is never used: `svg_header`
 --> embroidery_stitcher/src/lib.rs:2:1
  |
2 | fn svg_header(w: i32, h: i32) -> String
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(dead_code)] on by default

   Compiling re5 v0.1.0 (file:///home/thoth/art/2019/radial-embroidery/re5)
error[E0603]: function `svg_header` is private
 --> re5/src/main.rs:8:19
  |
8 |     let mut svg = embroidery_stitcher::svg_header(100,100);
  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

আমাকে pubসেই ফাংশনের সামনের দিকে চড় মারতে হয়েছিল

pub fn svg_header(w: i32, h: i32) -> String

এখন এটা কাজ করছে.


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