src/bin
- это специальное имя каталога для Car go. Файлы в этом каталоге компилируются как автономные двоичные файлы при запуске cargo build
. При компиляции в виде двоичных файлов они не являются частью структуры ящика, определенной в main.rs
или lib.rs
.
Если вы просто хотите использовать bin::one
в качестве модуля внутри main.rs
, то, что у вас есть работает уже! Вы получаете сообщения об ошибках при компиляции one.rs
в виде отдельного двоичного файла, а не при компиляции main.rs
с bin::one
в качестве модуля. Если вы запустите cargo run --bin <name-of-project>
, компиляция будет выполнена успешно, и она запустит программу в main.rs
.
Чтобы сказать Car go, что он не компилирует one.rs
, я бы предложил переименовать bin
каталог. Это не только решает техническую проблему, но и с меньшей вероятностью запутает других программистов, читающих проект, которые ожидают, что bin
будет содержать двоичные файлы. Может быть какой-то способ помешать Car go специально обработать bin
таким образом; однако, переименование это, вероятно, лучший вариант.
Если вы do хотите скомпилировать one.rs
в отдельный исполняемый файл, использующий two
, вы должны создать файл lib.rs
в том же каталоге, что и main.rs
. Это также специальный файл для Car go, который определяет структуру модуля для ящика библиотеки.
// lib.rs
pub mod lib { /* note: this lib is not related to lib.rs; just unfortunately named */
pub mod two;
}
Затем внутри one.rs
напишите use <crate-name>::lib::two;
// bin/one.rs
use mod_test::lib::two;
crate::lib::two
не работает не , поскольку файлы в каталоге bin
компилируются как автономные двоичные файлы, а не как члены ящика; поэтому вы должны вызывать ящик по его «внешнему» имени.
, добавив файл lib.rs в sr c, объявив структуру модуля lib и написав use mod_test :: lib :: два; в one.rs работает, но:
1) он побеждает идею не умножать «файлы декларации тупого модуля» в моем ящике.
2) Я должен буквально копировать ту же самую информацию в двух разных местах (в main.rs и в lib.rs)
main.rs
и lib.rs
- два разных корня ящика . Им разрешено иметь разную структуру. Вам не нужны оба, если вы не хотите генерировать двоичный файл и библиотеку. Если вы хотите использовать ящик библиотеки из любого двоичного файла (включая main.rs
), он находится на расстоянии use
:
use mod_test;
См. Также