Don't generate meta.rs file (#2350)

diff --git a/probe-rs/build.rs b/probe-rs/build.rs
index 9139035..320e05a 100644
--- a/probe-rs/build.rs
+++ b/probe-rs/build.rs
@@ -7,7 +7,7 @@
 
 fn main() {
     #[cfg(feature = "cli")]
-    generate_meta();
+    generate_bin_versions();
     println!("cargo:rerun-if-changed=build.rs");
 
     // Only rerun build.rs if something inside targets/ or `PROBE_RS_TARGETS_DIR`
@@ -84,35 +84,11 @@
     Ok(())
 }
 
-/// Generates a `meta.rs` file in a crates `OUT_DIR`.
-///
-/// This is intended to be used in the `build.rs` of a crate.
-///
-///
-///
-/// # Examples
-///
-/// ```no_run
-/// crate::util::meta::generate_meta();
-/// println!("cargo:rerun-if-changed=build.rs");
-/// ```
 #[cfg(feature = "cli")]
-pub fn generate_meta() {
+fn generate_bin_versions() {
     const CARGO_VERSION: &str = env!("CARGO_PKG_VERSION");
     const GIT_VERSION: &str = git_version::git_version!(fallback = "crates.io");
-    let long_version: String = format!("{CARGO_VERSION}\ngit commit: {GIT_VERSION}");
 
-    let out_dir = std::env::var_os("OUT_DIR").unwrap();
-    let dest_path = std::path::Path::new(&out_dir).join("meta.rs");
-    std::fs::write(
-        dest_path,
-        format!(
-            r#"#[allow(dead_code)]mod meta {{
-pub const CARGO_VERSION: &str = "{CARGO_VERSION}";
-pub const GIT_VERSION: &str = "{GIT_VERSION}";
-pub const LONG_VERSION: &str = "{long_version}";
-}}        "#
-        ),
-    )
-    .unwrap();
+    println!("cargo:rustc-env=PROBE_RS_VERSION={CARGO_VERSION}");
+    println!("cargo:rustc-env=PROBE_RS_LONG_VERSION={CARGO_VERSION} (git commit: {GIT_VERSION})");
 }
diff --git a/probe-rs/src/bin/probe-rs/cmd/cargo_embed/mod.rs b/probe-rs/src/bin/probe-rs/cmd/cargo_embed/mod.rs
index 2ba53e9..05dcb74 100644
--- a/probe-rs/src/bin/probe-rs/cmd/cargo_embed/mod.rs
+++ b/probe-rs/src/bin/probe-rs/cmd/cargo_embed/mod.rs
@@ -3,7 +3,7 @@
 mod rttui;
 
 use anyhow::{anyhow, Context, Result};
-use clap::{CommandFactory, FromArgMatches};
+use clap::Parser;
 use colored::*;
 use parking_lot::FairMutex;
 use probe_rs::gdb_server::GdbInstanceConfiguration;
@@ -35,8 +35,13 @@
 use crate::FormatOptions;
 
 #[derive(Debug, clap::Parser)]
-#[command(after_long_help = CargoOptions::help_message("cargo embed"))]
-#[command(bin_name = "cargo embed", display_name = "cargo-embed")]
+#[clap(
+    name = "cargo embed",
+    bin_name = "cargo embed",
+    version = env!("PROBE_RS_VERSION"),
+    long_version = env!("PROBE_RS_LONG_VERSION"),
+    after_long_help = CargoOptions::help_message("cargo embed")
+)]
 struct CliOptions {
     /// Name of the configuration profile to use.
     #[arg()]
@@ -101,14 +106,7 @@
     }
 
     // Parse the commandline options.
-    let opt = {
-        let matches = CliOptions::command()
-            .version(crate::meta::CARGO_VERSION)
-            .long_version(crate::meta::LONG_VERSION)
-            .get_matches_from(&args);
-
-        CliOptions::from_arg_matches(&matches)?
-    };
+    let opt = CliOptions::parse_from(&args);
 
     // Change the work dir if the user asked to do so.
     if let Some(ref work_dir) = opt.work_dir {
diff --git a/probe-rs/src/bin/probe-rs/cmd/cargo_flash/mod.rs b/probe-rs/src/bin/probe-rs/cmd/cargo_flash/mod.rs
index cf42dce..71a9334 100644
--- a/probe-rs/src/bin/probe-rs/cmd/cargo_flash/mod.rs
+++ b/probe-rs/src/bin/probe-rs/cmd/cargo_flash/mod.rs
@@ -1,5 +1,6 @@
 mod diagnostics;
 
+use clap::Parser;
 use colored::*;
 use diagnostics::render_diagnostics;
 use probe_rs::probe::list::Lister;
@@ -12,14 +13,17 @@
 };
 use crate::util::flash;
 use crate::util::logging::{setup_logging, LevelFilter};
-use clap::{CommandFactory, FromArgMatches};
-
 use crate::util::{cargo::build_artifact, logging};
 
 /// Common options when flashing a target device.
 #[derive(Debug, clap::Parser)]
-#[command(after_long_help = CargoOptions::help_message("cargo flash"))]
-#[command(bin_name = "cargo flash", display_name = "cargo-flash")]
+#[clap(
+    name = "cargo flash",
+    bin_name = "cargo flash",
+    version = env!("PROBE_RS_VERSION"),
+    long_version = env!("PROBE_RS_LONG_VERSION"),
+    after_long_help = CargoOptions::help_message("cargo flash")
+)]
 struct CliOptions {
     /// Use this flag to reset and halt (instead of just a reset) the attached core after flashing the target.
     #[arg(long)]
@@ -77,14 +81,7 @@
     }
 
     // Parse the commandline options.
-    let opt = {
-        let matches = CliOptions::command()
-            .version(crate::meta::CARGO_VERSION)
-            .long_version(crate::meta::LONG_VERSION)
-            .get_matches_from(&args);
-
-        CliOptions::from_arg_matches(&matches)?
-    };
+    let opt = CliOptions::parse_from(&args);
 
     // Initialize the logger with the loglevel given on the commandline.
     let _log_guard = setup_logging(None, opt.log);
diff --git a/probe-rs/src/bin/probe-rs/main.rs b/probe-rs/src/bin/probe-rs/main.rs
index 2d93421..c8c31ee 100644
--- a/probe-rs/src/bin/probe-rs/main.rs
+++ b/probe-rs/src/bin/probe-rs/main.rs
@@ -1,8 +1,6 @@
 mod cmd;
 mod util;
 
-include!(concat!(env!("OUT_DIR"), "/meta.rs"));
-
 use std::cmp::Reverse;
 use std::ffi::OsStr;
 use std::fs;
@@ -30,8 +28,8 @@
 #[clap(
     name = "probe-rs",
     about = "The probe-rs CLI",
-    version = meta::CARGO_VERSION,
-    long_version = meta::LONG_VERSION
+    version = env!("PROBE_RS_VERSION"),
+    long_version = env!("PROBE_RS_LONG_VERSION")
 )]
 struct Cli {
     /// Location for log file