स्थानीय अप्रकाशित टोकरे का उपयोग कैसे करें?


103

मैंने एक पुस्तकालय बनाया है:

cargo new my_lib

और मैं एक अलग कार्यक्रम में उस पुस्तकालय का उपयोग करना चाहता हूं:

cargo new my_program --bin
extern crate my_lib;

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

इसे काम करने के लिए मुझे क्या करने की आवश्यकता है?

वे एक ही प्रोजेक्ट फ़ोल्डर में नहीं हैं।

.
├── my_lib
└── my_program

उम्मीद है कि यह समझ में आता है।

मुझे लगा कि मैं कार्गो गाइड के अनुसार पथ को ओवरराइड कर पाऊंगा , लेकिन यह बताता है

आप इस सुविधा का उपयोग कार्गो को यह बताने के लिए नहीं कर सकते हैं कि स्थानीय अप्रकाशित बक्से कैसे खोजें।

यह रस्ट (1.3) के नवीनतम स्थिर संस्करण का उपयोग करते समय है।

जवाबों:


137

अपने निष्पादन योग्य Cargo.toml पर निर्भरता अनुभाग जोड़ें और पथ निर्दिष्ट करें:

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

या समकक्ष वैकल्पिक TOML:

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

की जाँच करें निर्भरता निर्दिष्ट करने के लिए कार्गो डॉक्स और अधिक विस्तार, कैसे एक स्थानीय पथ के बजाय एक Git भंडार का उपयोग करने की तरह के लिए।


8
क्या अपने आप को (विकास के लिए) एक स्थानीय टोकरा का उपयोग करने का एक तरीका है, जबकि कार्गो को छोड़ कर।
डेविड राउंड

1
फिलहाल डिफ़ॉल्ट रूप से संभव नहीं है। हालाँकि, आप स्थानीय शाखा पर काम कर सकते हैं, Cargo.toml को स्थानीय निर्भरता संदर्भों (या मिश्रित संदर्भों) से बदल सकते हैं, और इससे पहले कि आप विलय करें या उसके दौरान, मुख्य Cargo.toml फ़ाइल को वापस रखें या रखें।
पॉल-सेबेस्टियन मैनोल

7
@DavidRoundy यदि आप अभी भी उत्तर की तलाश कर रहे हैं, तो अब यह करना संभव है कि आप क्या पूछ रहे हैं। आप दोनों को versionऔर pathएक निर्भरता के लिए निर्दिष्ट कर सकते हैं और pathजब आप इसे प्रकाशित करते हैं तो यह भाग को बाहर निकाल देगा :)
कोनी हिलराइड्स

विस्तृत दस्तावेज doc.rust-lang.org/cargo/reference/…
डेविड जे।

1
क्या इसके 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

अब यह काम कर रहा है।


2
और अब यह उत्तर एक लघु लेख है: Purplefrog.com/~thoth/rust-external-lbooks
म्यूटेंट बॉब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.