Язык Rust поддерживает условную компиляцию с использованием таких атрибутов, как #[cfg(test)]
.
Rust также поддерживает сценарии сборки с использованием файла build.rs
для запуска кода в рамках процесса сборки для подготовки к компиляции.
Я хотел бы использовать условную компиляцию в коде Rust для условной компиляции в зависимости от того, компилируем ли мы для сценария сборки, аналогично тому, как это возможно для test
сборок.
Представьте себе следующее:
#[cfg(build)]
fn main() {
// Part of build script
}
#[cfg(not(build))]
fn main() {
// Not part of build script, probably regular build
}
Это не работает, потому что build
не является допустимым идентификатором здесь.
Можно ли сделать это, используя другой атрибут, или можно использовать какой-то другой прием для достижения чего-то похожего?
Для некоторого контекста по этому вопросу:
Моя цель - генерировать сценарии завершения оболочки через clap
во время компиляции. У меня есть довольно полное определение App
для нескольких файлов в приложении. Я хотел бы использовать это в build.rs
, включив эти части с помощью макроса include!(...)
(как предложил от clap
), поэтому мне не нужно определять App
во второй раз , Это вытягивает некоторые зависимости, которые я хотел бы исключить, когда они используются файлом build.rs
, так как в этом случае они не нужны. Это - это то, что я пытаюсь сделать доступным в моем build.rs
сценарии.