diff --git a/gen/cmd/src/depfile.rs b/gen/cmd/src/depfile.rs
index 5bb7a66..d8d3626 100644
--- a/gen/cmd/src/depfile.rs
+++ b/gen/cmd/src/depfile.rs
@@ -63,13 +63,13 @@
 mod tests {
     use std::{fs::File, io::Read};
 
-    use tempdir::TempDir;
+    use tempfile::tempdir;
 
     use super::Depfile;
 
     #[test]
     fn test_simple_depfile() {
-        let tmp_dir = TempDir::new("depfile-test").unwrap();
+        let tmp_dir = tempdir().unwrap();
         let f = tmp_dir.path().join("depfile.d");
         let mut df = Depfile::new(&f).unwrap();
         df.add_output(&tmp_dir.path().join("a/b"));
@@ -85,7 +85,7 @@
 
     #[test]
     fn test_multiple_outputs() {
-        let tmp_dir = TempDir::new("depfile-test").unwrap();
+        let tmp_dir = tempdir().unwrap();
         let f = tmp_dir.path().join("depfile.d");
         let mut df = Depfile::new(&f).unwrap();
         df.add_output(&tmp_dir.path().join("a/b"));
diff --git a/gen/cmd/src/main.rs b/gen/cmd/src/main.rs
index 20f278b..8b109c3 100644
--- a/gen/cmd/src/main.rs
+++ b/gen/cmd/src/main.rs
@@ -316,27 +316,33 @@
             name_autocxxgen_h,
         )?;
     }
-    //writer.write_placeholders(header_counter.into_inner(), desired_number, "h")?;
     if matches.is_present("gen-rs-include") {
+        if !matches.is_present("fix-rs-include-name") && desired_number.is_some() {
+            return Err(miette::Report::msg(
+                "gen-rs-include and generate-exact requires fix-rs-include-name.",
+            ));
+        }
+        let mut counter = 0usize;
         let rust_buildables = parsed_files
             .iter()
             .flat_map(|parsed_file| parsed_file.get_rs_outputs());
-        for (counter, include_cxx) in rust_buildables.enumerate() {
+        for include_cxx in rust_buildables {
             let rs_code = generate_rs_single(include_cxx);
             let fname = if matches.is_present("fix-rs-include-name") {
-                format!("gen{}.include.rs", counter)
+                name_include_rs(counter)
             } else {
                 rs_code.filename
             };
             writer.write_to_file(fname, rs_code.code.as_bytes())?;
+            counter += 1;
         }
+        writer.write_placeholders(counter, desired_number, name_include_rs)?;
     }
     if matches.is_present("gen-rs-archive") {
         let rust_buildables = parsed_files
             .iter()
             .flat_map(|parsed_file| parsed_file.get_rs_outputs());
         let json = generate_rs_archive(rust_buildables);
-        eprintln!("Writing to gen.rs.json in {:?}", outdir);
         writer.write_to_file("gen.rs.json".into(), json.as_bytes())?;
     }
     if let Some(depfile) = depfile {
@@ -353,6 +359,10 @@
     format!("gen{}.h", counter)
 }
 
+fn name_include_rs(counter: usize) -> String {
+    format!("gen{}.include.rs", counter)
+}
+
 fn get_dependency_recorder(depfile: Rc<RefCell<Depfile>>) -> Box<dyn RebuildDependencyRecorder> {
     Box::new(RecordIntoDepfile(depfile))
 }
