rust - पुस्तकालय और बाइनरी दोनों के साथ जंग पैकेज?




rust-cargo (3)

आप lib.rs और main.rs को स्रोत फ़ोल्डर में एक साथ रख सकते हैं। कोई संघर्ष नहीं है और कार्गो दोनों चीजों का निर्माण करेगा।

डॉक्यूमेंटेशन संघर्ष को हल करने के लिए अपने Cargo.toml जोड़ें:

[[bin]]
name = "main"
doc = false

मैं एक रस्ट पैकेज बनाना चाहता हूं जिसमें एक पुन: प्रयोज्य पुस्तकालय (जहां अधिकांश कार्यक्रम लागू किया गया है) दोनों शामिल हैं, और एक निष्पादन योग्य भी है जो इसका उपयोग करता है।

यह मानते हुए कि मैंने रस्ट मॉड्यूल सिस्टम में किसी भी शब्दार्थ को भ्रमित नहीं किया है, मेरी Cargo.toml फाइल को क्या देखना चाहिए?


आप सिर्फ src/bin में बाइनरी सोर्स और अपने बाकी सोर्स src/bin में भी डाल सकते हैं। आप मेरे प्रोजेक्ट में एक उदाहरण देख सकते हैं। आपको अपने Cargo.toml को बिल्कुल भी संशोधित करने की आवश्यकता नहीं है, और प्रत्येक स्रोत फ़ाइल को उसी नाम के बाइनरी में संकलित किया जाएगा।

दूसरे उत्तर के विन्यास को इसके बाद बदल दिया जाता है:

$ tree
.
├── Cargo.toml
└── src
    ├── bin
    │   └── mybin.rs
    └── lib.rs

Cargo.toml

[package]
name = "example"
version = "0.0.1"
authors = ["An Devloper <[email protected]>"]

src / lib.rs

use std::error::Error;

pub fn really_complicated_code(a: u8, b: u8) -> Result<u8, Box<Error>> {
    Ok(a + b)
}

src / bin / mybin.rs

extern crate example;

fn main() {
    println!("I'm using the library: {:?}", example::really_complicated_code(1, 2));
}

और इसे निष्पादित करें:

$ cargo run --bin mybin
I'm using the library: Ok(3)

इसके अतिरिक्त, आप बस एक src/main.rs बना सकते हैं जिसका उपयोग src/main.rs निष्पादन योग्य के रूप में किया जाएगा। दुर्भाग्य से, यह cargo doc कमांड के साथ टकराव करता है:

एक पैकेज का दस्तावेज नहीं दे सकता है जहां एक पुस्तकालय और एक बाइनरी का एक ही नाम है। एक का नाम बदलने या लक्ष्य को doc = false रूप में चिह्नित करने पर विचार करें


Tok:tmp doug$ du -a

8   ./Cargo.toml
8   ./src/bin.rs
8   ./src/lib.rs
16  ./src

Cargo.toml:

[package]
name = "mything"
version = "0.0.1"
authors = ["me <[email protected]>"]

[lib]
name = "mylib"
path = "src/lib.rs"

[[bin]]
name = "mybin"
path = "src/bin.rs"

src / lib.rs:

pub fn test() {
    println!("Test");
}

src / bin.rs:

extern crate mylib; // not needed since Rust edition 2018

use mylib::test;

pub fn main() {
    test();
}




rust-cargo