title: Makefile for Windows and Cygwin
body: <p>I need to have a <code>makefile</code> work under Windows and Cygwin.  I having problems with the makefile detecting the OS correctly and setting appropriate variables.  </p>
  
  <p>The objective is to set variables for the following commands, then invoke the commands in rules using the variables:</p>
  
  <ul>
  <li>Delete file:  <code>rm</code> in Cygwin, <code>del</code>
  in Windows.</li>
  <li>Remove directory:  <code>rmdir</code> (different
  parameters in Cygwin and Windows)</li>
  <li>Copy file:  <code>cp</code> in Cygwin, <code>copy</code> in
  Windows.</li>
  <li>Testing for file existance:  <code>test</code>
  in Cygwin, <code>IF EXIST</code> in Windows.</li>
  <li>Listing contents of a file:  <code>cat</code> in
  Cygwin, <code>type</code> in Windows.</li>
  </ul>
  
  <p>Here is my attempt, which always uses the <code>else</code> clause:  </p>
  
  <pre><code>OS_KIND = $(OSTYPE) #OSTYPE is an environment variable set by Cygwin.
  ifeq ($(OS_KIND), cygwin)
   ENV_OS = Cygwin
   RM = rm -f
   RMDIR = rmdir -r
   CP = cp
   REN = mv
   IF_EXIST = test -a
   IF_NOT_EXIST = ! test -a
   LIST_FILE = cat
  else
   ENV_OS = Win_Cmd
   RM = del -f -Q
   RMDIR = rmdir /S /Q
   IF_EXIST = if exist
   IF_NOT_EXIST = if not exist
   LIST_FILE = type
  endif
  </code></pre>
  
  <p>I'm using the forward slash character, '/', as a directory separator.  This is a problem with the Windows command, as it is interpreting it as program argument rather than a separator.  Anybody know how to resolve this issue?</p>
  
  <p>I am using make with Mingw in both Windows Console and Cygwin.</p>