GNU make,如何确定路径是文件还是目录?

yeh*_*nan 2 makefile

从某些路径,我使用

PATHS = $(wildcard $(SOME_PATH)/*)
Run Code Online (Sandbox Code Playgroud)

获得所有子路径.

我需要知道它是文件还是目录.

怎么做make?

谢谢.

Mad*_*ist 8

约翰马歇尔有一种方法可行,但有一种更安全的方式.所有目录总是有一个众所周知的条目,那就是".".所以,你要做的是:

PATHS := $(wildcard $(SOME_PATH)/*)
DIRS := $(patsubst %/.,%,$(wildcard $(addsuffix /.,$(PATHS))))
FILES := $(filter-out $(DIRS),$(PATHS))
Run Code Online (Sandbox Code Playgroud)

通配符将匹配所有目录,并且只匹配目录,因为只有目录包含".".这很强大.

Yehnan的方式也可以,但效率较低,因为你正在为PATHS中的每个元素调用一个shell.这很可能不会影响你的运行时整体,但如果它可以在make内部而不是通过运行shell来完成,我宁愿这样做.它还有助于避免$(shell ...)的可移植性.