gpt4 book ai didi

c++ makefile将前缀附加到带空格的双引号项目列表

转载 作者:行者123 更新时间:2023-11-30 02:20:26 26 4
gpt4 key购买 nike

假设我的 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...

关于c++ makefile将前缀附加到带空格的双引号项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49671685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com