« 为 lua 封装 C 对象的生存期管理问题 | 返回首页 | 让 GNU Make 把中间文件放到独立目录 »

GNU Make 处理斜杠的问题

GNU Make 对反斜杠的处理很恶心。用常规方法,你很难弄出单个反斜杠出来。

比如直接写 SLASH = \ 是不可以的,因为 \ 被用来连接下一行的。

而你用 SLASH = \\ 会生成两个反斜杠,而不是一个。

这个问题在 BSD Make 里没有,但在 GNU Make 里是个很让人头痛的问题,尤其是你需要做多平台的时候。

虽然 Windows 下,大多数时候,路径名中使用 \\ 等同于 \ 。但有的时候也会出些小问题,尤其在做很复杂的模式匹配的时候。

今天我下决心搞清楚这个问题怎么解决,最终 google 到了方法。

定义出单个反斜杠可以曲线救国:

SLASH := $(strip \)

更有甚者,在 GNU Make 中,还可以写

/ := $(strip \)

这样定义的好处是,你可以用 $/ 生成一个路径分割符,而不需要用前面定义的 $(SLASH) 。

参考:GNU Make path handling

Comments

函数一直是我最差的了。

@jj: 程序最好不要依赖于尾部的空格是否存在

起来越来越不喜欢用 GNU 的东西,同样的东西首选 BSD 的。

个人认为这是GNU make的BUG. 也许可以递交一个BUG REPORT.

斜杠后面加个空格啥的不行吗

strip函数里面的反斜杠丢掉了

沙发~

Post a comment

非这个主题相关的留言请到:留言本