Write rust/cxx.h header only once
diff --git a/gen/build/src/lib.rs b/gen/build/src/lib.rs
index 8d2e519..afbcbe1 100644
--- a/gen/build/src/lib.rs
+++ b/gen/build/src/lib.rs
@@ -98,15 +98,24 @@
     let mut build = paths::cc_build();
     build.cpp(true);
     build.cpp_link_stdlib(None); // linked via link-cplusplus crate
+    write_header()?;
 
     for path in rust_source_files {
-        try_generate_bridge(&mut build, path.as_ref())?;
+        generate_bridge(&mut build, path.as_ref())?;
     }
 
     Ok(build)
 }
 
-fn try_generate_bridge(build: &mut Build, rust_source_file: &Path) -> Result<()> {
+fn write_header() -> Result<()> {
+    let ref cxx_h = paths::include_dir()?.join("rust").join("cxx.h");
+    let _ = fs::create_dir_all(cxx_h.parent().unwrap());
+    let _ = fs::remove_file(cxx_h);
+    let _ = fs::write(cxx_h, gen::include::HEADER);
+    Ok(())
+}
+
+fn generate_bridge(build: &mut Build, rust_source_file: &Path) -> Result<()> {
     let opt = Opt::default();
     let generated = gen::generate_from_path(rust_source_file, &opt);
 
@@ -118,11 +127,5 @@
     let implementation_path = paths::out_with_extension(rust_source_file, ".cc")?;
     fs::write(&implementation_path, generated.implementation)?;
     build.file(&implementation_path);
-
-    let ref cxx_h = paths::include_dir()?.join("rust").join("cxx.h");
-    let _ = fs::create_dir_all(cxx_h.parent().unwrap());
-    let _ = fs::remove_file(cxx_h);
-    let _ = fs::write(cxx_h, gen::include::HEADER);
-
     Ok(())
 }