我正在尝试生成一个per-sourcefile宏,它将保存源文件的基本文件名。这是针对make here所描述的。
我试图覆盖“对象”构建器,但它不起作用... 我试着做here所描述的内容。
def my_object_builder(env, target, source, **kwargs):
"""A builder that calls the Object builder, with the addition of defining
a macro that holds the source file's basename
"""
if SCons.Util.is_List(source):
if len(source) > 1:
raise ValueError('cannot pass a list of sources to Object builder: %s',
[str(x) for x in source])
else:
source, = source
if 'CPPDEFINES' not in kwargs:
kwargs['CPPDEFINES'] = []
kwargs['CPPDEFINES'].append(('__MY_FILENAME',
os.path.basename(str(source))))
ret = env._Object(target=target,
source=source,
**kwargs)
return ret
然后,更换建造者:
env['BUILDERS']['_Object'] = env['BUILDERS']['Object']
env['BUILDERS']['Object'] = my_object_builder
这不起作用。我收到以下错误:
AttributeError: 'function' object has no attribute 'src_suffixes'
我认为它与环境的MethodWrapper有关,但我无法验证。
也许我从错误的角度出发。也许我应该改变每个源文件的环境(看起来很多工作......)
主要要求是使用将是无缝的。我不希望用户必须调用MyObjectBuilder类。此外,StaticLibrary Builder应该调用新的对象构建器。
非常感谢任何帮助。 谢谢!
釜谷。
答案 0 :(得分:0)
找到它。这是一个班轮......
env.Append(CCFLAGS=['-D__MY_FILENAME=\\"${SOURCE.file}\\"'])
只需添加基于规则的定义。 引号只是能够在不对表达式进行描述的情况下打印它的一个补充。