我需要有一个makefile
在 Windows 和 Cygwin 下工作。我在 makefile 正确检测操作系统并设置适当的变量时遇到问题。
目标是为以下命令设置变量,然后使用变量调用规则中的命令:
- 删除文件:
rm
在西格温,del
在Windows中。
- 删除目录:
rmdir
(不同的
Cygwin 和 Windows 中的参数)
- 复制文件:
cp
在西格温,copy
在
视窗。
- 测试文件是否存在:
test
在西格温,IF EXIST
在Windows中。
- 列出文件的内容:
cat
在
西格温,type
在Windows中。
这是我的尝试,它总是使用else
条款:
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
我使用正斜杠字符“/”作为目录分隔符。这是 Windows 命令的问题,因为它将其解释为程序参数而不是分隔符。有人知道如何解决这个问题吗?
我在 Windows 控制台和 Cygwin 中将 make 与 Mingw 一起使用。
我强烈建议你搬到CMake http://cmake.org自动生成您的 Makefile。这些问题都已经解决了,并且支持MingW、MSYS和Cygwin。
RM: file(REMOVE [file1 ...])
RMDIR: file(REMOVE_RECURSE [file1 ...]) # (not quite the same functionality; deletes files, too)
CP: file(COPY files... DESTINATION...)
REN: file(RENAME <oldname> <newname>)
IF_EXIST: if(EXISTS file-name)
IF_NOT_EXIST: if(NOT EXISTS file-name)
LIST_FILE: file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])
如果您生成 MinGW Makefile,所有路径都会自动转换为 DOS 样式。这是一件美丽的事情。
最后,它也使 Makefile 的其余部分变得更加简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)