【问题标题】:Using Cargo with my project's own directory structure将 Cargo 与我的项目自己的目录结构一起使用
【发布时间】:2016-08-28 09:18:07
【问题描述】:

我可以在不使用 standard project layout 的情况下使用 Cargo 构建 Rust 代码吗?

我的源文件不在名为src 的目录中,这不会改变。我的二进制文件必须在当前目录中结束(或者,在某些其他项目中,在不称为target/SOMETHING 的不同目录中)。我可以告诉 Cargo 可执行文件 foo 必须从 foo.rsbar.rs 构建在与 Cargo.toml 相同的目录中,而 quxfoo.rs 构建?

我不关心 Cargo 作为构建系统或部署系统。我只对它作为图书馆管理系统感兴趣。 Apparently Cargo is the only game in the Rust town for this.

【问题讨论】:

  • 请问……为什么?约定优于配置等等……
  • @MatthieuM。我一直不明白为什么它不是“配置优于约定”。约定失败rule of two:如果您有两个约定不兼容的组件,您会怎么做?你被一股不可抗拒的力量困住,撞击着不动的货物。
  • 如果您有两个组件的约定不兼容,您会怎么做? => 您进行必要的更改以使两者都符合约定,显然。 Cargo 开发得足够早,它可以从一开始就直接设置约定(1.0),以便所有项目都遵循相同的约定。话虽如此,可能可以对其进行调整(这就是为什么我发表评论而不是回答);就个人而言,我只是想知道这是否是个好主意……更改项目的成本可能低于每个维护者必须了解为什么它的工作方式不同的成本。
  • @MatthieuM。 Cargo 的开发当然还不够早,以至于无法制定惯例。目录树已经存在了半个多世纪!并非所有项目都是纯 Rust 项目。 (Java 有时我也有同样的问题,但 Rust 工具链在这方面似乎更糟。)
  • 我显然是指 Rust 项目中的约定 :) 无论如何,我并不是说这是不可能的,只是逆流而上总是一场艰苦的战斗。

标签: rust directory-structure rust-cargo


【解决方案1】:

不是真的。您可以通过在清单中明确指定源文件来控制它们的位置:

[[bin]]
name = "foo"
src = "foo.rs"

[[bin]]
name = "qux"
src = "splong.rs"

我不知道foo 是从foo.rs 构建的意思是什么 bar.rs,而qux 仅从foo.rs 构建。您不能随意将源文件放在一起:foo.rs 使用 bar.rs,或者不使用。

但您无法从清单中控制目标目录。有build.target-dir 设置(在Cargo's configuration 中,而不是清单中),但这只能让您更改target 目录,而不是其中的第二级。您可以使用CARGO_TARGET_DIR environment variable 更改它,但您也不能从清单中设置环境变量。

也就是说,将CARGO_TARGET_DIR 设置为项目的根目录也会改变所有中间文件的去向,并且这意味着每次你在调试和发布版本,您必须进行完整的重新编译。

您可能需要考虑在the Cargo issue tracker 上提出一个关于将其设为选项的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2016-06-18
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多