在Scons中排除某些文件的构建
因为我刚接触Scons,所以在把我现有的Makefile迁移到Scons时遇到了困难。
背景:我在一个文件夹里有50个文件。我想筛选出所有扩展名为*.cxx的文件,而且文件名中不能包含“win32”这个字符串。
有没有人能给我提供在Scons中实现这个逻辑的建议:
这是我在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)
moduleSources这里应该包含所有的*.cxx文件的列表(不包括win32字符串),这些文件将用于制作一个静态库。
任何帮助都非常感谢。
1 个回答
0
你用一个包含空格的字符串来描述一组源代码文件,但这样做并没有达到你想要的效果。
相反,你应该创建一个文件名的列表。下面的 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)