Уже давно использую SCons для build-скриптов. Однако недавно, просматривая зачем-то его руководство, обратил внимание на такую удобную штуку как создание собственных тулзов.
SCons скрипты часто используют какие-то общие части. Раньше я такие части выносил в отдельные питоновские модули и подключал их через import в билд-скрипт. Однако так как эти модули лежали не рядом со скриптом, и не в PYTHONPATH, возникал ужас вида
1 import os
2 import sys
3 from os import path
4
5 sys.path.append(path.normpath(path.join(os.getcwd(), "..", "common", "build")))
6
7 from myModule import SomeFunc
Так вот, тулз – это просто модуль питона, который содержит две функции – generate(env, **kw) и exists(env, **kw).
Первая функция вызывается при подключении тулза к окружению и позволяет добавить к окружению произвольные методы, переменные и т.д.
Теперь все становится очень просто:
1 e = Environment(tools=('MyTool', ), toolpath=('../common/build',))
2 e.SomeFunc(...)
Ну и сам тулз выглядит вот так:
1 def generate(env):
2 env.AddMethod(SomeFunc)
3
4 def exists(env):
5 return 1
6
7 def SomeFunc(env):
8 pass
Полезно читать доку
Комментариев нет:
Отправить комментарий