diff --git a/src/gn/rust_project_writer.cc b/src/gn/rust_project_writer.cc
index 181d50f..eb2d4e2 100644
--- a/src/gn/rust_project_writer.cc
+++ b/src/gn/rust_project_writer.cc
@@ -137,6 +137,22 @@
   return std::nullopt;
 }
 
+std::vector<std::string> FindAllArgValues(
+    const char* arg,
+    const std::vector<std::string>& args) {
+  std::vector<std::string> values;
+  for (auto it = args.begin(); it != args.end(); ++it) {
+    if (*it == arg) {
+      ++it;
+      if (it == args.end()) {
+        break;
+      }
+      values.push_back(*it);
+    }
+  }
+  return values;
+}
+
 std::optional<std::string> FindArgValueAfterPrefix(
     const std::string& prefix,
     const std::vector<std::string>& args) {
@@ -231,6 +247,9 @@
     crate.SetCompilerTarget(compiler_target.value());
 
   ConfigList cfgs = FindAllArgValuesAfterPrefix("--cfg=", compiler_args);
+  auto exact_cfgs = FindAllArgValues("--cfg", compiler_args);
+  cfgs.insert(cfgs.end(), std::make_move_iterator(exact_cfgs.begin()),
+              std::make_move_iterator(exact_cfgs.end()));
 
   crate.AddConfigItem("test");
   crate.AddConfigItem("debug_assertions");
diff --git a/src/gn/rust_project_writer_helpers.h b/src/gn/rust_project_writer_helpers.h
index 4feff94..f11de8c 100644
--- a/src/gn/rust_project_writer_helpers.h
+++ b/src/gn/rust_project_writer_helpers.h
@@ -143,6 +143,11 @@
     const std::string& prefix,
     const std::vector<std::string>& args);
 
+// Find all arguments that match the given exact string, returning the value
+// after.
+std::vector<std::string> FindAllArgValues(const char* arg,
+                                          const std::vector<std::string>& args);
+
 // Find all arguments that match the given prefix, returning the value after
 // the prefix for each one.  e.g. "--cfg=value" is returned as "value" if the
 // prefix "--cfg=" is used.
diff --git a/src/gn/rust_project_writer_helpers_unittest.cc b/src/gn/rust_project_writer_helpers_unittest.cc
index c37f215..082e92e 100644
--- a/src/gn/rust_project_writer_helpers_unittest.cc
+++ b/src/gn/rust_project_writer_helpers_unittest.cc
@@ -252,3 +252,28 @@
                                        "feature=\"bar_enabled\""};
   EXPECT_EQ(expected, result);
 }
+
+TEST_F(RustProjectWriterHelper, FindAllArgValues) {
+  TestWithScope setup;
+
+  Target target(setup.settings(), Label(SourceDir("//foo/"), "bar"));
+  target.set_output_type(Target::RUST_LIBRARY);
+  target.visibility().SetPublic();
+  SourceFile lib("//foo/lib.rs");
+  target.sources().push_back(lib);
+  target.source_types_used().Set(SourceFile::SOURCE_RS);
+  target.rust_values().set_crate_root(lib);
+  target.rust_values().crate_name() = "foo";
+  target.config_values().rustflags().push_back("--cfg");
+  target.config_values().rustflags().push_back("feature=\"foo_enabled\"");
+  target.config_values().rustflags().push_back("--edition=2018");
+  target.config_values().rustflags().push_back("--cfg");
+  target.config_values().rustflags().push_back("feature=\"bar_enabled\"");
+  target.config_values().rustflags().push_back("--target");
+
+  auto args = ExtractCompilerArgs(&target);
+  std::vector<std::string> result = FindAllArgValues("--cfg", args);
+  std::vector<std::string> expected = {"feature=\"foo_enabled\"",
+                                       "feature=\"bar_enabled\""};
+  EXPECT_EQ(expected, result);
+}
