gpt4 book ai didi

scons - 如何过滤 SCons Glob 结果?

转载 作者:行者123 更新时间:2023-12-04 16:25:42 34 4
gpt4 key购买 nike

我有时想从 SCons 的 Glob 结果中排除某些源文件。通常是因为我想用不同的选项编译那个源文件。像这样的东西:

objs = env.Object(Glob('*.cc'))
objs += env.Object('SpeciallyTreatedFile.cc', CXXFLAGS='-O0')

当然,这给 SCons 带来了一个问题:
scons: *** Two environments with different actions were specified
for the same target: SpeciallyTreatedFile.o

我通常使用以下习语来解决这个问题:
objs = env.Object([f for f in Glob('*.cc')
if 'SpeciallyTreatedFile.cc' not in f.path])

但这非常难看,如果要过滤掉不止一个文件,那就更难看了。

有没有更清晰的方法来做到这一点?

最佳答案

我厌倦了复制 [f for f in Glob ...]几个地方的表达式,所以我写了下面的辅助方法,并添加到构建环境中:

import os.path

def filtered_glob(env, pattern, omit=[],
ondisk=True, source=False, strings=False):
return filter(
lambda f: os.path.basename(f.path) not in omit,
env.Glob(pattern))

env.AddMethod(filtered_glob, "FilteredGlob");

现在我可以写
objs = env.Object(env.FilteredGlob('*.cc',
['SpeciallyTreatedFile.cc', 'SomeFileToIgnore.cc']))
objs += env.Object('SpeciallyTreatedFile.cc', CXXFLAGS='-O0')

使用这种模式很容易写出类似的东西,比如使用正则表达式过滤器作为 omit参数而不是简单的文件名列表,但这很适合我当前的需求。

关于scons - 如何过滤 SCons Glob 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518715/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com