Windows下MakeFile怎么获取所有子目录中所有文件的文件列表
Windows下MakeFile如何获取所有子目录中所有文件的文件列表?
如题,Windows下MakeFile如何获取所有子目录中所有文件的文件列表?
其中,子目录的名字是任意的(也就是说不知道子目录名)
而且子目录下还有子目录
可以限定目录深度,但要求深度可变(也可以不限定,最好不限定)
在Linux下可以用Shell命令,比如 $(shell ls) 或者 $(shell find . -maxdepth 1 -type d)之类的
但在Window下如何做?
我现在使用的是一个笨方法如下
这种方法虽然可行,但深度加一层,要再加一个FILESN := $(foreach v,$(FILESN-1),$(wildcard $(v)/*))
这种方法让谁看了都不会满意,
求好的方法
------解决思路----------------------
$(shell dir /b /s /a-d c:\*.*)
C:\>dir /?
显示目录中的文件和子目录列表。
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
[drive:][path][filename]
指定要列出的驱动器、目录和/或文件。
/A 显示具有指定属性的文件。
attributes D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 - 表示“否”的前缀
/B 使用空格式(没有标题信息或摘要)。
/C 在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
禁用分隔符显示。
/D 跟宽式相同,但文件是按栏分类列出的。
/L 用小写。
/N 新的长列表格式,其中文件名在最右边。
/O 用分类顺序列出文件。
sortorder N 按名称(字母顺序) S 按大小(从小到大)
E 按扩展名(字母顺序) D 按日期/时间(从先到后)
G 组目录优先 - 反转顺序的前缀
/P 在每个信息屏幕后暂停。
/Q 显示文件所有者。
/S 显示指定目录和所有子目录中的文件。
/T 控制显示或用来分类的时间字符域。
timefield C 创建时间
A 上次访问时间
W 上次写入的时间
/W 用宽列表格式。
/X 显示为非 8.3 文件名产生的短名称。格式是 /N 的格式,
短名称插在长名称前面。如果没有短名称,在其位置则
显示空白。
/4 用四位数字显示年
可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)
来替代预先设定的开关。例如,/-W。
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
如题,Windows下MakeFile如何获取所有子目录中所有文件的文件列表?
其中,子目录的名字是任意的(也就是说不知道子目录名)
而且子目录下还有子目录
可以限定目录深度,但要求深度可变(也可以不限定,最好不限定)
在Linux下可以用Shell命令,比如 $(shell ls) 或者 $(shell find . -maxdepth 1 -type d)之类的
但在Window下如何做?
我现在使用的是一个笨方法如下
:
SUBDIRS := .
FILES1 := $(foreach v,$(SUBDIRS),$(wildcard $(v)/*))
FILES2 := $(foreach v,$(FILES1),$(wildcard $(v)/*))
FILES3 := $(foreach v,$(FILES2),$(wildcard $(v)/*))
FILES4 := $(foreach v,$(FILES3),$(wildcard $(v)/*))
FILES5 := $(foreach v,$(FILES4),$(wildcard $(v)/*))
FILES := $(FILES1) $(FILES2) $(FILES3) $(FILES4) $(FILES5)
这种方法虽然可行,但深度加一层,要再加一个FILESN := $(foreach v,$(FILESN-1),$(wildcard $(v)/*))
这种方法让谁看了都不会满意,
求好的方法
------解决思路----------------------
$(shell dir /b /s /a-d c:\*.*)
C:\>dir /?
显示目录中的文件和子目录列表。
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
[drive:][path][filename]
指定要列出的驱动器、目录和/或文件。
/A 显示具有指定属性的文件。
attributes D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 - 表示“否”的前缀
/B 使用空格式(没有标题信息或摘要)。
/C 在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
禁用分隔符显示。
/D 跟宽式相同,但文件是按栏分类列出的。
/L 用小写。
/N 新的长列表格式,其中文件名在最右边。
/O 用分类顺序列出文件。
sortorder N 按名称(字母顺序) S 按大小(从小到大)
E 按扩展名(字母顺序) D 按日期/时间(从先到后)
G 组目录优先 - 反转顺序的前缀
/P 在每个信息屏幕后暂停。
/Q 显示文件所有者。
/S 显示指定目录和所有子目录中的文件。
/T 控制显示或用来分类的时间字符域。
timefield C 创建时间
A 上次访问时间
W 上次写入的时间
/W 用宽列表格式。
/X 显示为非 8.3 文件名产生的短名称。格式是 /N 的格式,
短名称插在长名称前面。如果没有短名称,在其位置则
显示空白。
/4 用四位数字显示年
可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)
来替代预先设定的开关。例如,/-W。
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……