ソース ファイルのベース ファイル名を保持するソース ファイルごとのマクロを生成しようとしています。これは make 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'
EnvironmentのMethodWrapperが関係していると思いますが、確認できませんでした。
多分私は間違った角度からこれをしようとしています。ソースファイルごとに環境を変えたほうがいいかも(大変な作業のようです...)
主な要件は、使用がシームレスになることです。ユーザーが MyObjectBuilder クラスを呼び出す必要はありません。また、StaticLibrary Builder は新しいオブジェクト ビルダーを呼び出す必要があります。
どんな助けでも大歓迎です。ありがとう!
BugoK.