首页 > 解决方案 > MAKE:makefile 中的路径操作

问题描述

我的项目目录结构遵循 foo/bar/baz/boo/ 的模式我想找到所有 foo,其中 boo=TEST mylist=$(dir $(shell find $(PRJPATH) -name TEST))给了我一个列表$(PRJPATH)/foo/bar/baz/

超出这一点,我无法取得任何进展。如何从 mylist 的每个元素中删除最后两个文件夹名称?

注意我的最终目标是:每个 foo 文件夹都包含一个 makefile,我只想make -C $(FOO folder)为那些有/ /TEST 子文件夹的文件夹运行

IE

$(mylist):
         make -C $@
verify: $(mylist)
         junit ....

编辑1

一个典型的文件夹结构可能

uart/basic/verif/TEST spi/feature1/rtl_sim/TEST pcie/dma/regression/TEST

mylist 然后将评估到列表(uart spi pcie)

标签: makefilegnu-make

解决方案


如何从 mylist 的每个元素中删除最后两个文件夹名称?

PRJPATH := /abs/path/to/project/root
mylist := $(PRJPATH)/foo1/bar1/baz1/ $(PRJPATH)/foo2/bar2/baz2/

# use abspath for dirty work
mychop2abs := $(abspath $(addsuffix /../..,$(mylist)))

# could transform to relative paths if needed
mychop2rel := $(patsubst $(PRJPATH)/%,%,$(mychop2abs))

推荐阅读