从路径中删除../
我有目标文件进来,可能看起来像这样的路径:
'../../src/foo/bar.c'
我希望他们被输出到
'build/src/foo/bar.o'
目前使用:
COBJS := $(notdir $(CFILES))
COBJS := $(patsubst %,$(BUILD)%.o,$(COBJS))
我可以实现
'build/bar.o'
如果任何两个库/项目包含相同的类名,这是有问题的。
所以问题是,如何从Make中的路径中删除多个“../”。 我尝试了明显而又天真的方法,但没有结果。
更新,以下内容将完全匹配../../并将其替换为其余。 除了特定于../../外,这是完美的。 只需要使它匹配任何数量的../../
COBJS := $(CFILES:../../%=%)
更新,
解决,只有三个声誉害羞张贴我自己的答案。
COBJS := $(subst ../,,$(CFILES))
正如我原来的问题所发布的,我忘了最终回答。
这个和可能的许多其他Make字符串替换的解决方案如下所示:
COBJS := $(subst ../,,$(CFILES))
'subst'需要3个参数。 $ toMatch,$ replaceWith,$ string。
在这种情况下,$(CFILES)是要编译的所有.c文件的列表。 我没有任何东西取代'../'。
尝试abspath。
COBJS := $(foreach file,${CFILES},$(abspath ${file}))
解决您的问题的简单方法如下。 考虑一个简单的Makefile
path_to_remove := batch1/test2
path_to_add := earth/planet
my_paths :=
batch1/test2/p/a3.c
batch1/test2/p/a2.c
batch1/test2/p/a1.c
batch1/test2/q/b3.c
batch1/test2/q/b2.c
batch1/test2/q/b1.c
$(info [Original] [$(my_paths)])
my_paths := $(my_paths:$(path_to_remove)/%=$(path_to_add)/%)
$(info [New Changed] [$(my_paths)])
all:
@echo "Hi Universe"
当你运行make命令时。
make
您将获得输出为:
[Original] [batch1/test2/p/a3.c batch1/test2/p/a2.c batch1/test2/p/a1.c batch1/test2/q/b3.c batch1/test2/q/b2.c batch1/test2/q/b1.c]
[New Changed] [earth/planet/p/a3.c earth/planet/p/a2.c earth/planet/p/a1.c earth/planet/q/b3.c earth/planet/q/b2.c earth/planet/q/b1.c]
链接地址: http://www.djcxy.com/p/10545.html
上一篇: remove ../ from path