我想制作一个Rust包,它既包含一个可重用库(大部分程序都在这里实现),也包含一个使用它的可执行文件。
假设我没有混淆 Rust 模块系统中的任何语义,我的 Cargo.toml
文件应该是什么样子的?
另一种解决方案是不要尝试将两者都塞进一个包中。对于具有友好可执行文件的稍大的项目,我发现使用工作区非常好。
在这里,我创建了一个二进制项目,其中包含一个库,但是有许多可能的方法可以组织代码:
% tree the-binary
the-binary
├── Cargo.toml
├── src
│ └── main.rs
└── the-library
├── Cargo.toml
└── src
└── lib.rs
Cargo.toml
这使用 [workspace]
键,并取决于库:
[package]
name = "the-binary"
version = "0.1.0"
edition = "2018"
[workspace]
[dependencies]
the-library = { path = "the-library" }
src/main.rs
fn main() {
println!(
"I'm using the library: {:?}",
the_library::really_complicated_code(1, 2)
);
}
图书馆/Cargo.toml
[package]
name = "the-library"
version = "0.1.0"
edition = "2018"
-库/src/lib.rs
use std::error::Error;
pub fn really_complicated_code(a: u8, b: u8) -> Result<u8, Box<dyn Error>> {
Ok(a + b)
}
并执行它:
% cargo run -q
I'm using the library: Ok(3)
这项计划有两大好处:
>
二进制文件现在可以使用仅适用于它的依赖项。例如,您可以包含大量板条箱来改善用户体验,例如命令行解析器或终端格式化。这些都不会“感染”库。
工作区防止每个组件的冗余构建。如果我们在<code>库</code>和<code>二进制</code>目录中同时运行<code>cargo build</code>,库不会同时生成-它在两个项目之间共享。
创建一个<code>src/main。rs,将用作实际可执行文件。您不需要修改货物。toml
,该文件将被编译为与库同名的二进制文件。
项目内容:
% tree
.
├── Cargo.toml
└── src
├── lib.rs
└── main.rs
Cargo.toml
[package]
name = "example"
version = "0.1.0"
edition = "2018"
资源中心/图书馆
use std::error::Error;
pub fn really_complicated_code(a: u8, b: u8) -> Result<u8, Box<dyn Error>> {
Ok(a + b)
}
src/main.rs
fn main() {
println!(
"I'm using the library: {:?}",
example::really_complicated_code(1, 2)
);
}
并执行它:
% cargo run -q
I'm using the library: Ok(3)
如果希望控制二进制文件的名称或拥有多个二进制文件,可以在< code>src/bin中创建多个二进制源文件,在< code>src中创建其余的库源文件。你可以在我的项目中看到一个例子。您根本不需要修改< code>Cargo.toml,并且< code>src/bin中的每个源文件都将被编译成同名的二进制文件。
项目内容:
% tree
.
├── Cargo.toml
└── src
├── bin
│ └── mybin.rs
└── lib.rs
Cargo.toml
[package]
name = "example"
version = "0.1.0"
edition = "2018"
资源中心/图书馆
use std::error::Error;
pub fn really_complicated_code(a: u8, b: u8) -> Result<u8, Box<dyn Error>> {
Ok(a + b)
}
src/bin/mybin.rs
fn main() {
println!(
"I'm using the library: {:?}",
example::really_complicated_code(1, 2)
);
}
并执行它:
% cargo run --bin mybin -q
I'm using the library: Ok(3)
另请参阅:
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 <me@gmail.com>"]
[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();
}
我想编译一个CSV文件到我的二进制,以便当我运行我的EXE应用程序时,它不需要文件夹中所需的CSV文件,并且已经在EXE中拥有CSV文件数据。 例如,我有多个CSV文件,包含2列和150行字符串,我想在运行时将其解析成C映射。当我使用这个应用程序,我不希望它是在一个文件夹与多个CSV文件,而只是EXE可以更便携。如果这些CSV文件中的数据必须更改,那么我只需用更新的CSV文件重新构建解决方案。 C
我有一个包含一些二进制值的整数列表 打印时的列表如下: 我如何将列表分解为8位并将那8位转换为十六进制?
我想将python的输出打印到控制台和一个包含错误(如果有的话)的文本文件。 到目前为止,我的尝试是: 注意:生成可执行文件hello的代码 相关链接: 如何使用python将“print”输出重定向到文件? http://linux.byexample.com/archives/349/how-to-redirect-output-to-a-file-as-well-as-display-it-
Python 不仅支持文本文件的读写,也支持二进制文件的读写,比如图片,声音文件等。 读取二进制文件 读取二进制文件使用 ‘rb’ 模式。 这里以图片为例: with open('test.png', 'rb') as f: image_data = f.read() # image_data 是字节字符串格式的,而不是文本字符串 这里需要注意的是,在读取二进制数据时,返回的数据是字
使用称为二进制的数据结构来存储大量原始数据。 二进制文件以比列表或元组更加节省空间的方式存储数据,并且运行时系统针对二进制文件的有效输入和输出进行了优化。 二进制文件以整数或字符串的顺序编写和打印,用小于或大于括号的双精度括起来。 以下是Erlang中二进制文件的示例 - 例子 (Example) -module(helloworld). -export([start/0]). start()
Blob对象 FileList对象 File对象 FileReader对象 综合实例:显示用户选取的本地图片 URL对象 参考链接 历史上,JavaScript无法处理二进制数据。如果一定要处理的话,只能使用charCodeAt()方法,一个个字节地从文字编码转成二进制数据,还有一种办法是将二进制数据转成Base64编码,再进行处理。这两种方法不仅速度慢,而且容易出错。ECMAScript 5引入