diff --git a/Source/cmExportCommand.cxx b/Source/cmExportCommand.cxx
index 5b611c06f9..a849aa2469 100644
--- a/Source/cmExportCommand.cxx
+++ b/Source/cmExportCommand.cxx
@@ -4,6 +4,8 @@
 
 #include "cm_static_string_view.hxx"
 #include "cmsys/RegularExpression.hxx"
+
+#include <algorithm>
 #include <map>
 #include <sstream>
 #include <utility>
@@ -66,7 +68,9 @@ bool cmExportCommand::InitialPass(std::vector<std::string> const& args,
   }
 
   std::vector<std::string> unknownArgs;
-  Arguments const arguments = parser.Parse(args, &unknownArgs);
+  std::vector<std::string> keywordsMissingValue;
+  Arguments const arguments =
+    parser.Parse(args, &unknownArgs, &keywordsMissingValue);
 
   if (!unknownArgs.empty()) {
     this->SetError("Unknown argument: \"" + unknownArgs.front() + "\".");
@@ -128,7 +132,10 @@ bool cmExportCommand::InitialPass(std::vector<std::string> const& args,
       return false;
     }
     ExportSet = it->second;
-  } else if (!arguments.Targets.empty()) {
+  } else if (!arguments.Targets.empty() ||
+             std::find(keywordsMissingValue.begin(),
+                       keywordsMissingValue.end(),
+                       "TARGETS") != keywordsMissingValue.end()) {
     for (std::string const& currentTarget : arguments.Targets) {
       if (this->Makefile->IsAlias(currentTarget)) {
         std::ostringstream e;
diff --git a/Tests/RunCMake/export/Empty.cmake b/Tests/RunCMake/export/Empty.cmake
new file mode 100644
index 0000000000..2198ddf75f
--- /dev/null
+++ b/Tests/RunCMake/export/Empty.cmake
@@ -0,0 +1 @@
+export(TARGETS FILE targets.cmake)
diff --git a/Tests/RunCMake/export/RunCMakeTest.cmake b/Tests/RunCMake/export/RunCMakeTest.cmake
index 46bb1fca3a..97a0ca6d8a 100644
--- a/Tests/RunCMake/export/RunCMakeTest.cmake
+++ b/Tests/RunCMake/export/RunCMakeTest.cmake
@@ -1,6 +1,7 @@
 include(RunCMake)
 
 run_cmake(CustomTarget)
+run_cmake(Empty)
 run_cmake(TargetNotFound)
 run_cmake(AppendExport)
 run_cmake(OldIface)