2011-06-20 248 views
0

我想寫一些MakefileGNU makeCygwin下編譯的項目。 某些環境變量是在Windows中定義的,例如某些SDK的路徑。比如說SDKPATH C:\MySDKPathCygwin下的Makefile和環境變量

在Makefile中,我用這個路徑訪問SDK的include目錄,其中包括:

CFLAGS := -I$(SDKPATH)/include

在目標規則: $(CC) $(CFLAGS) $< -o [email protected]

我的問題是,經過make將其展開爲C:\MySDKPath/include並將其作爲參數傳遞給編譯器,參數將擴展爲C:MySDKPath/include,這顯然不是意圖。

我不能真正改變環境變量,因爲它是由SDK設置的,並且要求每個人調整它會導致各種新問題。我可以做一些快速和骯髒的搜索和替換(如MYSDKPATH := $(patsubst C:%,/cygdrive/c%,$(subst \,/,$(SDKPATH)))),但我想知道是否沒有一個乾淨的,既定的方式來處理這種可能的常見情況。

+0

只是一個正在丟失的反斜槓,或者路徑中有幾個? – Beta

+0

@Beta:在我的機器上有一些它們,但由於它是一個環境變量,因此依賴於機器,你可以考慮我不知道它有多少。 –

回答

1

這是一種醜陋的kludge,但它似乎在UNIX中完成這項工作,因此請在Cygwin中嘗試一下。

# In the makefile 
SDKPATH := $(shell echo $$SDKPATH | sed 's:\\:/:g') 
+0

是的,那是我在想的那種工作。我沒有嘗試,但它應該與Cygwin一起工作。也許我們甚至可以使用'sed's @^\([A-Z] \):\ @/cygdrive/\ 1/@ 1; s @ \\ @/@ g''。但我仍然有興趣知道一個優雅的解決方案是什麼。 :) –

1

由於您使用的是cygwin,因此您可以使用cygpath在路徑樣式之間進行轉換。

CFLAGS := -I$(shell cygpath -ua "$(SDKPATH)/include") 

應該這樣做。