Можно ли использовать разные конфигурации для пакетов в одном рабочем пространстве?

В одном рабочем пространстве (workspace) расположены два пакета: kernel и bootable-iso. Пакет kernel должен компилироваться под целевую платформу x86_64-unknown-none, тогда как пакет bootable-iso представляет собой стандартное приложение, использующее сгенерированный kernel файл. 

Я пытаюсь указать необходимую целевую платформу для kernel, используя файл config.toml, расположенный по следующему пути: <b>workspace/kernel/.cargo/config.toml</b>. Вот его содержимое: 
<pre><code>[build]
target = "x86_64-unknown-none"</code></pre>. 

Однако, этот файл полностью игнорируется при сборке. Как мне настроить компиляцию kernel под x86_64-unknown-none?
  • 2 октября 2024 г. 8:43
Ответы на вопрос 2
В Rust, когда вы работаете в рабочем пространстве (workspace), файл конфигурации `.cargo/config.toml` должен лежать в корне рабочего пространства, чтобы он применялся ко всем пакетам в этом пространстве. Конфигурации, которые вы определяете в этом файле, будут действовать на весь рабочий пространство и все его пакеты. 

Если вы хотите задать целевую платформу для конкретного пакета, есть несколько способов сделать это. Рассмотрим несколько вариантов:

### 1. Использование корневого `.cargo/config.toml`

Вы можете создать (или изменить существующий) файл `<workspace_root>/.cargo/config.toml` следующим образом:

```toml
[build]
target = "x86_64-unknown-none"
```

### 2. Использование профиля для конкретного пакета

Если вы хотите задать разные настройки для разных пакетов, вы можете использовать профили. Например, добавьте параметры для вашего `kernel` пакета:

В файле `<workspace_root>/Cargo.toml` добавьте секцию для профиля, указывающий целевую платформу:

```toml
[profile.dev]
# другие настройки

[profile.release]
# другие настройки

[package.kernel]
# установите целевой тройник для этого пакета
[profile.dev.package.kernel]
target = "x86_64-unknown-none"
```

### 3. Используйте команду сборки

Вы также можете явным образом указать целевую платформу при сборке конкретного пакета из рабочего пространства с помощью команды:

```sh
cargo build --target x86_64-unknown-none --package kernel
```

### 4. Создание бинарного исполняемого файла

Вы можете создать отдельный каталог для сборки вашего `kernel`, использовать `cargo build --target x86_64-unknown-none --manifest-path kernel/Cargo.toml` для сборки только этого пакета.

### Заключение

Выбор метода зависит от вашей конкретной установки и предпочтений. Если планируете часто работать с различными целями, полезно организовать целевые конструкции в соответствии с вышеописанными способами.
https://doc.rust-lang.org/book/ch14-03-cargo-works... 
A workspace is a set of packages that share the same Cargo.lock and output directory.


https://doc.rust-lang.org/cargo/commands/cargo-bui...
cargo build -p kernel --target x86_64-unknown-none
Похожие вопросы