如何转义 makefile 中的反斜杠字符?

问题描述 投票:0回答:1

有几篇关于尝试转义 Makefile 中的字符的文章。 我有兴趣转义反斜杠

\
。 我需要根据操作系统动态构建路径。所以,我为此写了一个条件:

OperatingSystem :=
ifeq ($(OS),Windows_NT)
  Separator := \
else
  Separator := /
endif

Path := c:$(Separator)

当操作系统为 Windows 时,此代码会失败,因为反斜杠未转义,并且预计下一行有更多数据。 有谁知道我该如何克服这个问题? 我考虑了一种解决方法,如果是 Windows,我将读取名为

ProgramFiles
的环境变量,并从中取出第三个字符。但我怎样才能从中获得特定的字符呢?

谢谢,

windows makefile escaping backslash
1个回答
0
投票

您的问题的元答案是您永远不应该在 makefile 中使用反斜杠; make 是一个基于 POSIX 的程序,它期望解析的路径使用正斜杠。

99% 的 Windows 程序都接受正斜杠和反斜杠作为目录分隔符。因此,对于 makefile 中 99% 的配方,正斜杠都可以使用。对于那些不起作用的少数(通常只有 cmd.exe 程序,如

rmdir
copy
等),您可以在配方本身中进行替换。

最简单的直接答案是使用一个空变量将换行符与反斜杠分开,这样 make 就不会对其执行任何特殊操作。例如:

EMPTY :=
BACKSLASH := \$(EMPTY)

要注意的第二件事是,在大多数情况下,make 不会单独处理反斜杠。线路的末端确实是唯一重要的地方。

因此,在需要反斜杠的食谱中,您可以这样做:

sometarget:
        copy $(subst /,\,$<) $(subst /,\,$@)

无需做任何特殊的事情来“引用”反斜杠。

© www.soinside.com 2019 - 2024. All rights reserved.