WAF中find_program()不支持递归查找,如何实现递归查找程序?
解决WAF中find_program递归查找二进制文件的问题
你遇到的问题确实是因为find_program()默认只会在指定的path_list目录下直接查找,不会递归遍历子目录。这里有两种实用的解决方法:
方法一:手动递归收集所有子目录
通过Python标准库的os.walk遍历目标目录下的所有子目录,把它们全部加入path_list:
import os def get_all_subdirs(root_dir): subdirs = [] for dirpath, _, _ in os.walk(root_dir): subdirs.append(dirpath) return subdirs def configure(ctx): # 收集mydir/here下的所有子目录 all_subdirs = get_all_subdirs('mydir/here') ctx.find_program('myexe', var='MYEXE', path_list=all_subdirs)
方法二:使用WAF自带的路径匹配功能
用WAF的ant_glob方法来匹配所有子目录,更贴合WAF的使用习惯:
def configure(ctx): # 获取目标根目录对象 root_dir = ctx.path.find_dir('mydir/here') all_subdirs = [] if root_dir: # **/ 匹配所有层级的子目录 for subdir in root_dir.ant_glob('**/', quiet=True): all_subdirs.append(str(subdir.abspath())) ctx.find_program('myexe', var='MYEXE', path_list=all_subdirs)
需要注意的是,递归查找会遍历所有子目录,若目录结构较深可能会增加配置阶段的耗时;另外要确保当前用户对目标目录及其子目录有读取权限。
内容的提问来源于stack exchange,提问作者RandomB
相关产品推荐
相关产品推荐

