在Scons中排除某些文件的构建

0 投票
1 回答
946 浏览
提问于 2025-04-18 04:02

因为我刚接触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)

撰写回答