diff --git a/README.md b/README.md
index bb852f51280abc407722b93196946cd38c401b1a..3d0c8050a5a38bd9309dc6ba9f563a847904c60d 100644
--- a/README.md
+++ b/README.md
@@ -32,17 +32,13 @@ Here's an example build.rs script:
 extern crate cbindgen;
 
 use std::env;
-use cbindgen::{Config, Library};
 
 fn main() {
-    let root = env::var("CARGO_MANIFEST_DIR").unwrap();
-    let config = Config::from_root_or_default(&root);
-
-    Library::load_crate(Path::new(root),
-                        "CRATE_NAME",
-                        &config)
-        .generate().unwrap()
-        .write_to_file("bindings.h");
+    let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
+
+    cbindgen::generate(crate_dir)
+      .unwrap()
+      .write_to_file("bindings.h");
 }
 
 ```
diff --git a/src/bindgen/mod.rs b/src/bindgen/mod.rs
index decb4e30e87774dd3d95e21197e8122c758ad4f2..a7b05d66f564edf4812fc7a9ebec68c2f2e04730 100644
--- a/src/bindgen/mod.rs
+++ b/src/bindgen/mod.rs
@@ -51,5 +51,5 @@ mod writer;
 
 pub use self::cargo::*;
 pub use self::config::*;
-pub use self::library::Library;
+pub use self::library::{GeneratedBindings, Library};
 pub use self::cargo_toml::manifest;
diff --git a/src/lib.rs b/src/lib.rs
index 4b557405b384799ab3896cb2bedff4bfefffcc3c..6881b97206db562defd3aa2b499f2c3933be9f32 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -14,3 +14,19 @@ extern crate toml;
 mod bindgen;
 
 pub use bindgen::*;
+
+use std::path::Path;
+
+/// A utility function for build scripts to generate bindings for a crate, using
+/// a `cbindgen.toml` if it exists.
+pub fn generate(crate_dir: &str) -> Result<GeneratedBindings, String> {
+    let crate_dir = Path::new(crate_dir);
+    Library::load_crate(Cargo::load(crate_dir, None)?,
+                        &Config::from_root_or_default(crate_dir))?.generate()
+}
+
+/// A utility function for build scripts to generate bindings for a crate with a
+/// custom config.
+pub fn generate_config(crate_dir: &str, config: &Config) -> Result<GeneratedBindings, String> {
+    Library::load_crate(Cargo::load(Path::new(crate_dir), None)?, config)?.generate()
+}