Makefile for DOS/Windows and Cygwin

Posted by Thomas Matthews on Stack Overflow See other posts from Stack Overflow or by Thomas Matthews
Published on 2010-06-17T21:43:45Z Indexed on 2010/06/17 23:23 UTC
Read the original article Hit count: 444

Filed under:
|
|
|
|

I need to have a makefile work under DOS (Windows) and Cygwin. I having problems with the makefile detecting the OS correctly and setting appropriate variables.

The objective is to set variables for the following commands, then invoke the commands in rules using the variables:

  • Delete file: rm in Cygwin, del in DOS.
  • Remove directory: rmdir (different parameters in Cygwin and DOS)
  • Copy file: cp in Cygwin, copy in DOS.
  • Testing for file existance: test in Cygwin, IF EXIST in DOS.
  • Listing contents of a file: cat in Cygwin, type in DOS.

Here is my attempt, which always uses the else clause:

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

I'm using the forward slash character, '/', as a directory separator. This is a problem with the DOS command, as it is interpreting it as program argument rather than a separator. Anybody know how to resolve this issue?

Edit: I am using make with Mingw in both Windows Console (DOS) and Cygwin.

© Stack Overflow or respective owner

Related posts about c

    Related posts about Windows