2015-04-01 103 views
0

這裏就是我想要做的事:

EXTRA_INCLUDE_PATHS = ../dir1/path with spaces/ \ 
         ../dir2/other path with spaces/ 
CPPFLAGS += $(addprefix -I,$(EXTRA_INCLUDE_PATHS)) 

我想「-I../dir1/path with spaces/ […]」,但我得到的時候:「-I../dir/path -Iwith -Ispaces/ […]」。

我如何在addprefix的空格中空格?我試過這樣做,但它產生相同的結果:

space = 
space += 
#produces 「-Isome -Ipath」 
CPPFLAGS += $(addprefix -I,some$(space)path) 
+0

即使假設你這樣做了,在命令行上使用標誌也是行不通的,除非你避開變量中的空格或者引用了變量中的「words」,所以這看起來不太有用, 。 – 2015-04-01 20:00:43

+0

簡短的回答是,你不能。一般來說,make不能很好地處理文件名或空格在其中的路徑。最好避免它們。在這種情況下,您可以通過將'-I'選項直接放入'EXTRA_INCLUDE_PATHS'變量(以及引號,用於shell)來獲得所需內容。但是沒有辦法從GNU make的函數中得到你想要的。 – MadScientist 2015-04-02 00:12:42

回答

0

不要這樣做!正如@MadScientist指出的那樣,除非你想要非常傷心,否則你需要避開makefile中所有包含空格的文件名。空格是一個列表分隔符(包括目標列表),並且沒有辦法。使用文件系統中的符號鏈接來避免它們! (mklink在windows上,或者使用cygwin make,它理解cygwin的符號鏈接)。

也就是說,在目前的情況下(不是定義目標列表,而僅僅是包含目錄列表),可以使用單個字符來表示空間,只在最後才能翻譯它。

EXTRA_INCLUDE_PATHS = ../dir1/path|with|spaces/ ../dir2/other|path|with|spaces/ 
CPPFLAGS += $(subst |, ,$(patsubst %,-I'%',${EXTRA_INCLUDE_PATHS})) 

檢查結果:

$(error [${CPPFLAGS}]) 

Makefile:3: *** [-I'../dir1/path with spaces/' -I'../dir2/other path with spaces/']. Stop.。在這裏,$ CPPFLAGS的格式爲sh格式 - 空格用'引用,以便編譯器將每個-I看作單個參數。 使根本沒有這個級別的報價。

相關問題