簡體   English   中英

c ++ makefile將prefeix附加到帶空格的雙引號項列表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM