makefile中的路径转换

我的所有项目几乎都是通过makefile来组织编译的,无论是哪一个平台,
在linux平台上还好说些,在windows平台就比较麻烦了。

我在windows平台主要使用cygwin和msys,用cygwin是由于工具比较全,
而msys则比较简单,可以和项目一起打包也不会嫌太大。

原来我一直使用下面的语句进行路径的转换:

       JAVA_HOME := $(shell uname | grep -q "CYGWIN" && (echo $(JAVA_HOME) | sed 's/\([a-zA-Z]\):/\/cygdrive\/\1/')|| (echo $(JAVA_HOME) | sed 's/\([a-zA-Z]\):/\/\1/'))
       

如果需要将windows转换为unix格式,则会先调用下下面的方法

       JAVA_HOME := "$(shell echo $(JAVA_HOME) | sed -e 's/\\/\//g')"
       

上面的语句从我刚开始学makefile开始就一直这个样子了,这么多年也
没特别注意过,感觉就是复制一下,修改修改。可以看到上面会进行平台
判断,主要是由于cygwin的盘符路径是/cygdrive开头的,而msys的盘符路
径是/开头的。现在终于想了一个一统天下的简单方法:

       JAVA_HOME := $(shell cd $(JAVA_HOME) && pwd)
       

既简单效率又高,又实用,还与平台无关,实在太令我满意了。

发布者

rix

如果连自己都不爱自己,哪还有谁来爱你