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.