如何使用Cargo在同一源代码目录下构建多个平台的程序?

3
我经常在我的台式机和笔记本电脑之间切换,它们有不同的操作系统。为了协调,我喜欢将我的开发/项目目录存储在Dropbox中。Cargo 将尝试从两个操作系统的相同目录(即target/debug)构建。理想情况下,我希望有一种方法可以让我在每个平台上自动构建到特定于平台的构建目录:
  • target/x86_64-apple-darwin
  • target/x86_64-pc-windows-msvc
  • target/x86_64-unknown-linux-gnu
…或类似的东西。最初的回答。

1
交叉编译是指在与编译器运行的平台不同的平台上进行构建。我想要做的类似,但有些不同 - 在我的情况下,我总是在为与我构建的平台相同的平台进行编译... 我只是希望使用相同的源目录来为这两个平台进行编译。 - Paul Molodowitch
对不起,我误读了你的问题。 - Boiethios
2个回答

5
我建议查看树外构建。如果您有这样的项目:
project/
    Cargo.toml

您可以添加一个名为.cargo的目录:
project/
    .cargo/
        config
    Cargo.toml

将以下内容放入config文件中:

[build]
target-dir = "/tmp/build/dir"

只要路径对于两个操作系统都是有效的,那么它们将指向一个本地构建。此外,您可以避免将几百兆或几十亿字节的二进制文件同步到您的 Dropbox 帐户中。

1
我接受了 Matthieu M.'s suggestion,因为它既优雅、功能强大,又充分利用了 Cargo 的特性……但我意识到它并不适用于我的情况,因为 Windows 路径总是以“C:”开头,而我想要在 Mac 和 Windows 之间同步。

此外,我意识到还有另一种解决这个问题的简单方法,尽管它是针对 Dropbox 的:

Dropbox 有一种设置文件被忽略的方法,使用文件系统特定的备用流/属性。详细信息可以在这里找到:

https://help.dropbox.com/en-US/files-folders/restore-delete/ignored-files

(注:我曾经建议使用Dropbox的“选择性同步”功能,以禁用target目录的同步,但他们改变了这个功能的工作方式,所以你不能有一个与你的“选择性同步”目录同名的目录。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接