diff --git a/commands/make/make.drush.inc b/commands/make/make.drush.inc
index dce83fe..9d2c654 100644
--- a/commands/make/make.drush.inc
+++ b/commands/make/make.drush.inc
@@ -53,6 +53,8 @@ function make_drush_command() {
       'translations' => 'Retrieve translations for the specified comma-separated list of language(s) if available for all projects.',
       'working-copy' => 'Preserves VCS directories, like .git, for projects downloaded using such methods.',
       'download-mechanism' => 'How to download files. Should be autodetected, but this is an override if it doesn\'t work. Options are "curl" and "make" (a native download method).',
+      'projects' => 'Restrict the make to this comma-separated list of projects. To specify all projects, pass *.',
+      'libraries' => 'Restrict the make to this comma-separated list of libraries. To specify all libraries, pass *.',
     ),
     'engines' => array('release_info'),
     'topics' => array('docs-make', 'docs-make-example'),
@@ -153,6 +155,41 @@ function drush_make($makefile = NULL, $build_path = NULL) {
   }
 
   $info = make_parse_info_file($makefile);
+
+  // Support making just a portion of a make file
+  $restrictions = array(
+    'projects' => array_filter(drush_get_option_list('projects')),
+    'libraries' => array_filter(drush_get_option_list('libraries')),
+  );
+  // Only do anything if at least one sort of restriction is wanted.
+  if (count(array_filter($restrictions))) {
+    $restriction_msg = array();
+    $restriction_msg[] = dt("Drush make restricted to the following entries:");
+    foreach ($restrictions as $type => $keys) {
+      // No limitations for special '*' value
+      if (in_array('*', $keys)) {
+        $restriction_msg[] = dt(ucfirst($type) . ": <All>");
+      }
+      else {
+        if (!empty($keys)) {
+          $info[$type] = array_intersect_key($info[$type], array_fill_keys($keys, 1));
+        }
+        else {
+          $info[$type] = array();
+        }
+        $restriction_msg[] = empty($info[$type]) ? dt(ucfirst($type) . ": <None>") : dt(ucfirst($type) . ": !make_entries", array('!make_entries' => implode(',', array_keys($info[$type]))));
+      }
+    }
+    // Make it clear to the user what's going on.
+    drush_log(implode("\n", $restriction_msg), 'ok');
+
+    // Throw an error if these restrictions reduced the make to nothing.
+    if (empty($info['projects']) && empty($info['libraries'])) {
+      drush_set_error(dt('Could not build make file. All projects and libraries have been excluded.'));
+      return FALSE;
+    }
+  }
+
   if ($info === FALSE || ($info = make_validate_info_file($info)) === FALSE) {
     return FALSE;
   }
