如何在Makefile中为带空格的双引号路径添加前缀并提取目录
从文件路径提取目录生成Makefile INCLUDE变量
你说的要从文件路径里只提取目录部分的Makefile函数,是$(dir)!刚好能解决你的需求。
先看你现有的定义:
FOLDERS = "C:\Program Files\some3rdpartytool\inc\thing1.h" \ "C:\Program Files\some3rdpartytool\lib\libthing.lib" \ "C:\data\data1.h" \
如果直接用$(addprefix -I, $(FOLDERS))会把文件名也包含进去,显然不是你想要的结果。正确的写法是先用$(dir)提取每个路径的目录部分,再给它们加上-I前缀:
INCLUDE = $(addprefix -I, $(dir $(FOLDERS)))
简单拆解一下这个命令:
$(dir $(FOLDERS))会逐个处理FOLDERS里的每个路径,提取出对应的目录部分,处理后会得到:"C:\Program Files\some3rdpartytool\inc\" "C:\Program Files\some3rdpartytool\lib\" "C:\data\"- 接着
$(addprefix -I, ...)会给每个提取出来的目录前面加上-I前缀,最终就生成了你需要的INCLUDE变量内容。
额外提个小细节:要是你担心目录末尾的反斜杠可能带来问题,也可以用$(patsubst)配合做处理,但$(dir)是最直接原生的方案,完全能满足你的需求。
内容的提问来源于stack exchange,提问作者code_fodder
相关产品推荐
相关产品推荐

