使用Rust Cargo指定构建单个二进制文件无效,求助原因
问题分析与解决
你遇到的情况是因为项目中存在默认库目标,且你指定的二进制文件依赖这个库,所以Cargo在构建二进制时会先编译它依赖的库代码,导致看起来像是“构建了所有代码”。
具体原因
当项目根目录下存在src/目录且包含lib.rs(或其他符合库目标命名规则的文件)时,Cargo会自动创建一个默认的库目标。如果你的my_single_binary二进制代码中引用了这个库(比如use 你的项目名;),那么构建二进制时必须先编译该库,因此会触发库代码的构建流程。
解决方案
根据你的实际需求选择以下方式:
二进制无需依赖项目库
- 如果该二进制不需要用到
src/目录下的库代码,直接删除src/目录或其中的lib.rs等库源文件即可。之后执行cargo build --bin my_single_binary只会构建指定二进制。 - 或者在
Cargo.toml中显式禁用默认库目标:[lib] path = "nonexistent.rs" # 通过指定不存在的路径禁用默认库
- 如果该二进制不需要用到
二进制依赖库,但只想聚焦二进制构建
- 若需要保留库依赖,但不想看到库的构建日志,可以使用
--quiet参数简化输出:cargo build --bin my_single_binary --quiet
- 若需要保留库依赖,但不想看到库的构建日志,可以使用
检查是否存在其他自动识别的目标
- 确认
bin/目录下是否还有其他.rs文件或含main.rs的子目录(Cargo会自动将bin/下的每个.rs文件、或包含main.rs的子目录识别为独立二进制目标)。如果有,需确保--bin指定的名称准确无误,避免Cargo同时构建多个目标。
- 确认
内容的提问来源于stack exchange,提问作者JohnAllen
相关产品推荐
相关产品推荐

