[英]c++ makefile append prefeix to list of double-quoted items with spaces
讓我說我的makefile中有這個:
FOLDERS = "C:\Program Files\some3rdpartytool\inc\thing1.h" \
"C:\Program Files\some3rdpartytool\lib\libthing.lib" \
"C:\data\data1.h" \
現在我希望INCLUDE包含:
INCLUDE = -I"C:\Program Files\some3rdpartytool\inc" \
-I"C:\Program Files\some3rdpartytool\lib" \
-I"C:\data" \
通常這很容易 - 你只需要:
INCLUDE = $(addprefix -I, $(FOLDERS))
# you can also use the standard makefile function to take the folder path
# only - I just forget what it is off the top of my head...
但無論我做什么,這總是只適用於空白分隔列表(因為它的設計),所以我得到這樣的東西:
INCLUDE = -I"C:\Program \
-IFiles\some3rdpartytool\inc" \
-I"C:\Program \
-IFiles\some3rdpartytool\lib" \
-I"C:\data" \
有沒有標准的makefile方法來做到這一點? (標准==便攜式),我希望這適用於Windows和Linux。
注意我確實考慮過替換任何''' - >' - I''但我似乎無法在subst命令中使用空格...我正在努力尋找前進的道路......
好的,我們走了。
FOLDERS = "C:\Program Files\blah\thing1.h" \
"C:\Program Files\blah\libthing.lib" \
"C:\data\data1.h"
現在我們使用我從@MadScientist學習的技巧,定義一個包含空格的變量,並使用一個您確信不會在路徑中出現的占位符,例如“SPACE”。
E :=
S := $E $E
X1 := $(subst $(S),SPACE,$(FOLDERS))
# "C:\ProgramSPACEFiles\blah\thing1.h"SPACE"C:\ProgramSPACEFiles\...
這似乎取代了''的所有實例,包括路徑之間的實例,所以我們將更改它們:
X2 := $(subst "SPACE","$(S)",$(X1))
# "C:\ProgramSPACEFiles\blah\thing1.h" "C:\ProgramSPACEFiles\...
然后添加“-I”:
X3 := $(addprefix -I,$(X2))
# -I"C:\ProgramSPACEFiles\blah\thing1.h" -I"C:\ProgramSPACEFiles\...
然后將“SPACE”改回'':
X4 := $(subst SPACE,$(S),$(X3))
# -I"C:\Program Files\blah\thing1.h" -I"C:\Program Files...
@ Beta的解決方案很好而且很通用。 另一個更具體但可能更簡單的選項是使用類似的東西:
FOLDERS = "C:\Program Files\some3rdpartytool\inc" \
"C:\Program Files\some3rdpartytool\lib" \
"C:\data"
INCLUDES := $(patsubst "C:%,-I"C:%,$(FOLDERS))
但是,如果您在C:驅動器之外有文件夾,那么當然會失敗。
最后一個選項更通用,但仍然有一些問題(它減少了空白是主要的一個,但我從來沒有聽說過多個連續空格的路徑,所以也許沒關系)會是這樣的:
INCLUDES := -I$(subst " "," -I",$(strip $(FOLDERS)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.