Python 从内置SCON中排除某些文件
由于我是SCON的新手,我发现很难将现有的Makefile迁移到SCON 背景: 我在一个目录中有50个文件。我只想筛选扩展名为*.cxx的文件,也就是不带字符串win32的文件名 有人能建议在SCON中实现此逻辑吗: Makefile实现:Python 从内置SCON中排除某些文件,python,makefile,scons,Python,Makefile,Scons,由于我是SCON的新手,我发现很难将现有的Makefile迁移到SCON 背景: 我在一个目录中有50个文件。我只想筛选扩展名为*.cxx的文件,也就是不带字符串win32的文件名 有人能建议在SCON中实现此逻辑吗: Makefile实现: WIN32FILTER = $(wildcard *win32*) CXXOBJS = $(patsubst %.cxx,%.o,$(filter-out $(WIN32FILTER),$(wildcard *.cxx))) 在Scons中,我正在尝试以
WIN32FILTER = $(wildcard *win32*)
CXXOBJS = $(patsubst %.cxx,%.o,$(filter-out $(WIN32FILTER),$(wildcard *.cxx)))
在Scons中,我正在尝试以下内容:
moduleSources = ''
for root, dirs, files in os.walk('./'):
for filename in fnmatch.filter(files, '*.cxx'):
if "win32" not in filename:
moduleSources += ' ' + filename
env.StaticLibrary( "support_host", moduleSources)
此处的模块资源应包含所有*.cxx文件的列表,不包括用于创建静态库的win32字符串
非常感谢您的帮助。您可以创建一个包含空格的字符串来描述源代码文件集。这不是你希望的 而是创建一个文件名列表。以下SConstruct执行您想要的操作:
import os
import fnmatch
env = Environment()
moduleSources = []
for root, dirs, files in os.walk('./'):
for filename in fnmatch.filter(files, '*.cxx'):
if "win32" not in filename:
moduleSources.append(os.path.join(root, filename))
env.StaticLibrary( "support_host", moduleSources)
我自己对Scons完全不熟悉,但看起来Glob函数可能就是您想要的。如果Glob支持减法,则可能类似于Glob'*.cxx'-Glob'*win32*'。如果没有,那么对第一个Glob的结果的过滤或理解应该做你想做的事情,还有其他关于这样做的答案。这比使用os.walk要好。。