我正在尝试为Makefile
下GNU make
编译的项目编写一些Cygwin
。
某些环境变量在Windows中定义,如某些SDK的路径。比如说SDKPATH C:\MySDKPath
。
在Makefile中,我使用此路径访问SDK的include目录,其中包括:
CFLAGS := -I$(SDKPATH)/include
在目标规则中:
$(CC) $(CFLAGS) $< -o $@
我的问题是,在make
将其扩展为C:\MySDKPath/include
并将其作为参数传递给编译器后,参数将扩展为C:MySDKPath/include
,这显然不是意图。< / p>
我无法真正更改环境变量,因为它是由SDK设置的,并且要求每个人调整它会导致各种新问题。我可以做一些快速和脏的搜索和替换(如MYSDKPATH := $(patsubst C:%,/cygdrive/c%,$(subst \,/,$(SDKPATH)))
),但我想知道是否有一个干净,既定的方法来处理这种可能的常见情况。
答案 0 :(得分:1)
这是一种难看的kludge,但它似乎在UNIX中完成了这项工作,所以在Cygwin中尝试一下。
# In the makefile
SDKPATH := $(shell echo $$SDKPATH | sed 's:\\:/:g')
答案 1 :(得分:1)
由于您使用的是cygwin,因此可以使用cygpath在路径样式之间进行转换。
CFLAGS := -I$(shell cygpath -ua "$(SDKPATH)/include")
应该做的伎俩。