使用Cargo进行源代码构建(外部构建目录)?

ide*_*n42 14 build rust rust-cargo

使用过CMake之后,我已经习惯了使用CMake鼓励的源外构建.如何使用Cargo完成源外构建?


再次使用in-source-builds感觉就像倒退了一步:

  • 需要将开发工具配置为忽略路径.有时候有多个插件和开发工具 - 特别是使用VIM或Emacs!
  • 某些工具无法配置为轻松隐藏构建文件.虽然点文件通常是隐藏的,他们仍然会表现出Cargo.locktarget/,更糟糕的是,递归地暴露自己的内容.
  • 删除未跟踪的文件以删除版本控制之外的所有内容(通常是清理编辑器临时文件或某些测试输出),如果您忘记将新文件添加到版本控制并且在删除文件列表之前未正确手动检查文件列表,则会适得其反.
  • 依赖关系被下载到源代码路径中,有时会*.rstarget目录中添加文件作为构建间接deps的一部分,因此对所有*.rs文件进行操作可能会意外地拾取不在隐藏目录中的其他文件,因此即使在开发工具之后也不会被忽略已配置.

虽然可以解决所有这些问题,但我宁愿只有一个外部构建路径并保持源目录的原始状态.

Luk*_*odt 10

您可以通过配置文件(键)环境变量()指定文件夹的目录target/.以下是使用配置文件的示例:build.target-dirCARGO_TARGET_DIR

假设您想要一个目录,~/work/在该目录中要保存Cargo项目(~/work/foo/),并在其旁边保存目标目录(~/work/my-target/).

$ cd ~/work
$ cargo new --bin foo
$ mkdir .cargo
$ $EDITOR .cargo/config
Run Code Online (Sandbox Code Playgroud)

然后将以下内容插入配置文件中:

[build]
target-dir = "./my-target"
Run Code Online (Sandbox Code Playgroud)

如果您构建了正常的货物项目目录:

$ cd foo
$ cargo build
Run Code Online (Sandbox Code Playgroud)

你会注意到没有target/目录,但一切都在~/work/my-target/.


但是,Cargo.lock仍然保存在Cargo项目目录中,但这有点意义.对于可执行文件,您应该将Cargo.lock文件检入您的git!对于图书馆,你不应该.我想不得不忽略一个文件比忽略整个文件夹更好.

最后,有一些注意事项可以改变target-dir,它们在引入该功能的PR中列出.