pub mod build_project; pub mod new_project; pub const PROJECT_NAME: &str = "rust-cmaker"; use std::path::PathBuf; use clap::{command, Parser}; /// 命令行参数 #[derive(Parser, Debug)] #[command(author = "Cloyir mine123456@foxmail.com", version = "1.0.0", about = None, long_about = None)] struct Args { #[command(subcommand)] command: Commands, } #[derive(Parser, Debug)] enum Commands { /// 在当前目录新建项目 #[command(about = "创建一个新项目")] New { /// 项目名称 #[clap(name = "new_project_name")] project_name: String, }, /// 在此项目内编译 #[command(about = "构建当前文件夹下的项目")] Build { /// -O优化选项 #[clap(short = 'o', long = "option", name = "0~3", default_value = "0")] build_options: i32, /// 编译后是否立即运行 #[clap(short, long, default_value = "false")] run: bool, /// MinGW编译器地址, 不填默认已配置为环境变量 #[clap(short, long, default_value = None)] mingw: Option, }, } fn main() -> std::io::Result<()> { // 解析命令行参数 let args = Args::parse(); // println!("args: {:?}", args); match args.command { Commands::New { project_name } => { new_project::new_project(project_name); } Commands::Build { build_options, run, mingw, } => { let mingw = if let Some(t) = mingw { Some(PathBuf::from(t)) } else { None }; build_project::build_project(build_options, run, mingw)?; } } Ok(()) }