2012-11-08 46 views
2

我在我的HD上有一個文件夾,其名稱中包含圓括號。像:C:/stuff (really cool)/。該目錄下的make $(wildcard ..)函數無法正常工作。makefile - 轉義括號

$(wildcard C:/stuff (really cool)/*.jpg)` 

評估爲根本沒有結果。我想這是由於目錄名中的右括號被視爲$(wildcard ..)函數的右括號。用反斜槓轉義()不起作用。什麼也行不通,將目錄名稱放入一個變量,然後使用通配符函數。

DIR = C:/stuff (really cool) 
all: 
    @echo "$(wildcard $(DIR)/*.jpg)" 

再次沒有結果。

我該如何正確地轉義括號?

+0

Windows中的路徑分隔符是反斜槓。避免假設在這樣的古代工具中使用正斜槓。 –

+0

你可以用一個符號鏈接切斷結嗎? – Beta

回答

0

下不能正常工作,保持警告他人:

特殊字符通常是「保護」,或逃了出來,用封閉的報價。要用圓括號創建變量,請使用雙引號。

DIR = "C:/stuff (really cool)" 

在你的情況下,最大的問題是空間會導致你的路徑被分解成幾個部分而不是一個。

這工作:

GNU化妝可以讓你逃脫與\\空間,以便您到$wildcard調用將變成

$(wildcard C:/stuff\\ (really\\ cool)/*.jpg) 
+0

這對我不起作用。 'dir =「C:/ stuff(很酷)」;; foo = $(通配符$(dir)/ *)'; '$(foo)'是空的。 –

0

你沒有在你正在運行什麼樣的環境中提到,但兩者的以下打印機制適用於來自常規DOS提示符以及msys/mingw的我:

DIR = C:/stuff\ (really\ cool) 
$(info Files in subdir are: $(wildcard $(DIR)/*.jpg)) 

all: 
    @echo "Files in subdir are: $(wildcard $(DIR)/*.jpg)" 

雙引號aroun d echo -ed表達式僅對於msys/mingw是必需的。