Python 从内置SCON中排除某些文件

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中,我正在尝试以

由于我是SCON的新手,我发现很难将现有的Makefile迁移到SCON

背景: 我在一个目录中有50个文件。我只想筛选扩展名为*.cxx的文件,也就是不带字符串win32的文件名

有人能建议在SCON中实现此逻辑吗:

Makefile实现:

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要好。。