Cargo项目中:专属多文件二进制可执行文件的存放路径咨询
解决方案:给可执行文件创建专属子目录
嘿,这个场景我太熟悉了!要让某个可执行文件的专属源文件只属于它自己、不被编译进库,最清晰且符合Cargo约定的方式是给该可执行文件创建专属的子目录。
具体步骤如下:
调整项目目录结构
在src/bin下创建一个和你的可执行文件同名的子目录(比如exe1),然后把该可执行文件的入口文件改名为main.rs放在这个子目录里,同时把所有专属源文件也放进这个子目录。最终结构大概是这样:你的项目名/ ├── Cargo.toml └── src/ ├── lib1.rs ├── lib2.rs ├── lib3.rs └── bin/ └── exe1/ ├── main.rs # exe1的入口文件 └── exe1_helper.rs # 你的专属源文件,比如叫这个名字在入口文件中引用专属文件
在main.rs里,你可以直接通过模块的方式引用专属文件:// 在main.rs顶部声明模块 mod exe1_helper; fn main() { // 使用专属文件里的功能 exe1_helper::do_something(); }
为什么这种方式可行?
- Cargo会把
src/bin下的每个独立.rs文件,或者包含main.rs的子目录,都当作独立的可执行目标。 - 子目录里的所有文件都属于这个可执行文件的私有模块,完全不会被编译到项目的库部分(也就是
src/下的库文件)里。
备选方案(不推荐,但可用)
如果你不想用子目录,也可以在src/bin下直接放相关文件,然后手动在Cargo.toml里指定可执行目标:
[[bin]] name = "exe1" path = "src/bin/exe1_main.rs"
然后把专属文件放在src/bin/exe1_helper.rs,在exe1_main.rs里用mod exe1_helper;引用就行。不过这种方式不如子目录直观,容易和其他可执行文件的文件重名,所以优先推荐子目录方案。
内容的提问来源于stack exchange,提问作者user1002430
相关产品推荐
相关产品推荐

