有时候我希望在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])
但这很丑陋,如果有多个文件要被过滤掉,情况会变得更加糟糕。
有没有更清晰的方法来做到这一点呢?
Glob
变体。我需要收集具有不同扩展名长度的源文件:.c
,.f
,.cpp
,.adb
等,而Glob
无法在一次遍历中处理这些文件。我应该使用os.listdir
,filter
,map
-env.File
来完成这个任务,还是您有更好的建议? - Nordlöw