diff --color -Naur make-4.3/doc/make.1 make-4.3-new/doc/make.1
--- make-4.3/doc/make.1	2020-01-03 08:11:27.000000000 +0100
+++ make-4.3-new/doc/make.1	2020-10-01 09:14:06.164211474 +0200
@@ -330,6 +330,9 @@
 .TP 0.5i
 .B \-\-warn\-undefined\-variables
 Warn when an undefined variable is referenced.
+.TP 0.5i
+\fB\-x\fR, \fB\-\-print\-unexp\-cmd\fR
+Print commandline without expanding variables
 .SH "EXIT STATUS"
 GNU
 .B make
diff --color -Naur make-4.3/src/job.c make-4.3-new/src/job.c
--- make-4.3/src/job.c	2020-01-19 21:32:59.000000000 +0100
+++ make-4.3-new/src/job.c	2020-10-01 09:12:45.700493452 +0200
@@ -1134,6 +1134,14 @@
       free (child->command_lines);
     }
 
+    if (child->command_lines_orig != 0) 
+    {
+      unsigned int i;
+      for (i = 0; i < child->file->cmds->ncommand_lines; ++i)
+        free (child->command_lines_orig[i]);
+      free (child->command_lines_orig);
+    }
+
   if (child->environment != 0)
     {
       char **ep = child->environment;
@@ -1340,6 +1348,8 @@
 #endif
 
   /* Print the command if appropriate.  */
+  if (print_unexp_cmd_flag)
+    OS (message, 0, "\n EXECUTING COMMAND: %s", child->command_ptr_orig);
   if (just_print_flag || trace_flag
       || (!(flags & COMMANDS_SILENT) && !run_silent))
     OS (message, 0, "%s", p);
@@ -1676,7 +1686,7 @@
 {
   struct commands *cmds = file->cmds;
   struct child *c;
-  char **lines;
+  char **lines, **lines_orig; 
   unsigned int i;
 
   /* Let any previously decided-upon jobs that are waiting
@@ -1707,6 +1717,8 @@
 
   /* Expand the command lines and store the results in LINES.  */
   lines = xmalloc (cmds->ncommand_lines * sizeof (char *));
+  lines_orig = xmalloc (cmds->ncommand_lines * sizeof (char *)); 
+
   for (i = 0; i < cmds->ncommand_lines; ++i)
     {
       /* Collapse backslash-newline combinations that are inside variable
@@ -1807,10 +1819,15 @@
       cmds->fileinfo.offset = i;
       lines[i] = allocated_variable_expand_for_file (cmds->command_lines[i],
                                                      file);
+      lines_orig[i] = malloc (1 + strlen (cmds->command_lines[i]));
+      strcpy (lines_orig[i], cmds->command_lines[i]);    
     }
 
   cmds->fileinfo.offset = 0;
   c->command_lines = lines;
+  c->command_lines_orig = lines_orig;
+
+
 
   /* Fetch the first command line to be run.  */
   job_next_command (c);
@@ -1934,12 +1951,16 @@
         {
           /* There are no more lines to be expanded.  */
           child->command_ptr = 0;
+          child->command_ptr_orig = 0;
           child->file->cmds->fileinfo.offset = 0;
           return 0;
         }
       else
         /* Get the next line to run.  */
-        child->command_ptr = child->command_lines[child->command_line++];
+
+        child->command_ptr = child->command_lines[child->command_line];
+        child->command_ptr_orig = child->command_lines_orig[child->command_line];
+        child->command_line++;
     }
 
   child->file->cmds->fileinfo.offset = child->command_line - 1;
diff --color -Naur make-4.3/src/job.h make-4.3-new/src/job.h
--- make-4.3/src/job.h	2020-01-19 21:32:59.000000000 +0100
+++ make-4.3-new/src/job.h	2020-10-01 09:12:45.700493452 +0200
@@ -50,7 +50,9 @@
 
     char *sh_batch_file;        /* Script file for shell commands */
     char **command_lines;       /* Array of variable-expanded cmd lines.  */
+    char **command_lines_orig;  /* Array of non variable-expanded cmd lines */
     char *command_ptr;          /* Ptr into command_lines[command_line].  */
+    char *command_ptr_orig;     /* Ptr into command_lines_orig[command_line_orig]*/
 
     unsigned int  command_line; /* Index into command_lines.  */
 
diff --color -Naur make-4.3/src/main.c make-4.3-new/src/main.c
--- make-4.3/src/main.c	2020-01-19 21:32:59.000000000 +0100
+++ make-4.3-new/src/main.c	2020-10-01 09:13:39.010748329 +0200
@@ -232,6 +232,10 @@
 /* Nonzero means ignore print_directory_flag and never print the directory.
    This is necessary because print_directory_flag is set implicitly.  */
 
+/* nonzero means to print the command with unexpanded variables */
+
+int print_unexp_cmd_flag = 0;
+
 int inhibit_print_directory_flag = 0;
 
 /* Nonzero means print version information.  */
@@ -407,6 +411,8 @@
                               Consider FILE to be infinitely new.\n"),
     N_("\
   --warn-undefined-variables  Warn when an undefined variable is referenced.\n"),
+    N_("\
+  -x, --print-unexp-cmd       Print command without expanded variables\n" ),
     NULL
   };
 
@@ -439,6 +445,8 @@
     { 't', flag, &touch_flag, 1, 1, 1, 0, 0, "touch" },
     { 'v', flag, &print_version_flag, 1, 1, 0, 0, 0, "version" },
     { 'w', flag, &print_directory_flag, 1, 1, 0, 0, 0, "print-directory" },
+    { 'x', flag, &print_unexp_cmd_flag, 1, 1, 0, 0, 0, "print-unexp-cmd" },
+
 
     /* These options take arguments.  */
     { 'C', filename, &directories, 0, 0, 0, 0, 0, "directory" },
diff --color -Naur make-4.3/src/makeint.h make-4.3-new/src/makeint.h
--- make-4.3/src/makeint.h	2020-01-19 21:32:59.000000000 +0100
+++ make-4.3-new/src/makeint.h	2020-10-01 09:12:45.703826801 +0200
@@ -670,7 +670,7 @@
 extern int just_print_flag, run_silent, ignore_errors_flag, keep_going_flag;
 extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
 extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
-extern int print_version_flag, print_directory_flag, check_symlink_flag;
+extern int print_version_flag, print_directory_flag, print_unexp_cmd_flag, check_symlink_flag;
 extern int warn_undefined_variables_flag, trace_flag, posix_pedantic;
 extern int not_parallel, second_expansion, clock_skew_detected;
 extern int rebuilding_makefiles, one_shell, output_sync, verify_flag;
diff --color -Naur make-4.3/src/read.c make-4.3-new/src/read.c
--- make-4.3/src/read.c	2020-01-03 08:11:27.000000000 +0100
+++ make-4.3-new/src/read.c	2020-10-01 09:12:45.703826801 +0200
@@ -1079,6 +1079,7 @@
                        expand below once we know we don't have a
                        target-specific variable. */
                     variable_expand_string (pend, lb_next, SIZE_MAX);
+
                     lb_next += strlen (lb_next);
                     p2 = variable_buffer + p2_off;
                     cmdleft = variable_buffer + cmd_off + 1;
