게시되지 않은 지역 상자를 사용하는 방법은 무엇입니까?


103

라이브러리를 만들었습니다.

cargo new my_lib

다른 프로그램에서 해당 라이브러리를 사용하고 싶습니다.

cargo new my_program --bin
extern crate my_lib;

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

이 작업을 수행하려면 어떻게해야합니까?

동일한 프로젝트 폴더에 없습니다.

.
├── my_lib
└── my_program

바라건대 이것은 의미가 있습니다.

화물 가이드에 따라 경로를 재정의 할 수 있다고 생각 했지만

이 기능을 사용하여 Cargo에 게시되지 않은 로컬 상자를 찾는 방법을 알릴 수 없습니다.

이것은 Rust (1.3)의 최신 안정 버전을 사용할 때입니다.

답변:


137

실행 파일의 Cargo.toml에 종속성 섹션을 추가 하고 경로를 지정합니다.

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

또는 동등한 대체 TOML :

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

로컬 경로 대신 git 저장소를 사용하는 방법과 같은 자세한 내용은 종속성 지정에 대한 Cargo 문서를 확인하세요 .


8
다른 사람들도 내 코드를 빌드 할 수 있도록 Cargo.toml에서 crates.io를 참조하는 동안 로컬 크레이트를 직접 (개발 용) 사용하는 방법이 있습니까?
David Roundy

1
현재 기본적으로 불가능합니다. 그러나 로컬 브랜치에서 작업하고 Cargo.toml을 로컬 종속성 참조 (또는 혼합 참조)로 바꾸고 병합하기 전이나 도중에 기본 Cargo.toml 파일로 되돌 리거나 유지할 수 있습니다.
Paul-Sebastian Manole

7
@DavidRoundy 당신이 여전히 대답을 찾고 있다면, 이제 당신이 요구하는 것을 할 수 있습니다. 둘 다 versionpath종속성에 대해 지정할 수 있으며 path게시 할 때 부분이 제거됩니다. :)
Connie Hilarides


1
똑같이 할 수 있지만 git대신 version? my_lib = { path = "...", git = "..." }누군가가 리포지토리를 복제하고 프로그램을 컴파일하려고 할 때 개발 중에 로컬 사본을 사용할 수 있고 원격 git을 사용할 수 있도록 이와 같은 것 입니까?
Ruben Kostandyan 19

0

나는에 상응하는 것을 찾고 있었다 mvn install. 이 질문은 내 원래 질문과 완전히 중복되지는 않지만 원래 질문을 우연히 발견하고 여기 링크를 따르는 사람은 더 완전한 답변을 찾을 수 있습니다.

대답은 " mvn installCargo.toml 파일에 경로를 하드 코딩해야 하기 때문에 다른 사람의 컴퓨터에서는 잘못 될 수 있지만 거의 비슷할 수 있기 때문에에 해당하는 것은 없습니다 ."입니다.

기존 답변은 약간 짧고 실제로 작업을 수행하기 위해 조금 더 노력해야 했으므로 여기에 더 자세한 내용이 있습니다.

/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 Shepmaster의 답변을 반영하는 다음 단락을 포함합니다.

또는 외부 크레이트에서 모듈을 사용하려고했다면 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-libraries
Mutant Bob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.