make - 获取没有文件名的文件路径
make - Get path to file without filename
我的 Makefile 中有一条获取所有 src 文件的规则:
CFILES := $(shell find ./ -type f -name '*.c')
如何只获取 CFILES
.
的文件路径(不带文件名)
例如:
./drivers/fb/fb.c
变为 ./drivers/fb
./stivalle/stivalle.c
变为 ./stivalle
dirname
是你的朋友。 (别忘了man dirname
)
例如
$ dirname /opt/foo/bar.json
/opt/foo
请参阅 File Name Functions 上的 GNU make 部分。
所以你可以这样写:
DIRS := $(dir $(CFILES))
这会为您提供带有尾部斜杠的路径。如果要删除尾部斜线,可以使用:
DIRS := $(patsubst %/,%,$(dir $(CFILES)))
如果您在同一目录中有多个源文件,这也会为您提供副本。如果你只想要每个目录的一个实例,你可以使用:
DIRS := $(sort $(patsubst %/,%,$(dir $(CFILES))))
我的 Makefile 中有一条获取所有 src 文件的规则:
CFILES := $(shell find ./ -type f -name '*.c')
如何只获取 CFILES
.
例如:
./drivers/fb/fb.c
变为 ./drivers/fb
./stivalle/stivalle.c
变为 ./stivalle
dirname
是你的朋友。 (别忘了man dirname
)
例如
$ dirname /opt/foo/bar.json
/opt/foo
请参阅 File Name Functions 上的 GNU make 部分。
所以你可以这样写:
DIRS := $(dir $(CFILES))
这会为您提供带有尾部斜杠的路径。如果要删除尾部斜线,可以使用:
DIRS := $(patsubst %/,%,$(dir $(CFILES)))
如果您在同一目录中有多个源文件,这也会为您提供副本。如果你只想要每个目录的一个实例,你可以使用:
DIRS := $(sort $(patsubst %/,%,$(dir $(CFILES))))