gpt4 book ai didi

c - 适用于 Windows 和 Cygwin 的 Makefile

转载 作者:可可西里 更新时间:2023-11-01 10:01:47 28 4
gpt4 key购买 nike

我需要一个在 Windows 和 Cygwin 下工作的 makefile。我在正确检测操作系统和设置适当变量的 makefile 方面遇到问题。

目标是为以下命令设置变量,然后使用变量调用规则中的命令:

  • 删除文件:Cygwin 中的rmdel在 Windows 中。
  • 删除目录:rmdir(不同Cygwin 和 Windows 中的参数)
  • 复制文件:在Cygwin中cp,在copy中 window 。
  • 测试文件是否存在:test在 Cygwin 中,IF EXIST 在 Windows 中。
  • 列出文件的内容:cat inCygwin,在 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自动生成您的 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 的其余部分变得更加简单。

关于c - 适用于 Windows 和 Cygwin 的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com