Я создаю файлы в Задаче, пример кода выглядит следующим образом:
from waflib import Task, TaskGen
def build(bld):
bld(features='write_file')
class xyz(Task.Task):
def run(self):
self.generator.path.get_bld().make_node(self.outputs[0].relpath())
@TaskGen.feature('write_file')
def make_tasks(self):
for x in range(20):
src = bld.path.find_node('wscript')
tgt = src.change_ext('.'+str(x))
tsk = self.create_task('xyz', src=src, tgt=tgt)
Теперь все файлы помещаются в каталог build
, но я хочу, чтобы они были помещены в build\abc
. Как я могу это сделать? Для обычных сборок я могу использовать BuildContext
и указать variant
:
from waflib.Build import BuildContext
class abc(BuildContext):
variant = 'abc'
Но я не могу заставить BuildContext
работать на этом примере, и настройка variant
на Task.Task
не работает.
Обновление
Я обновляю пример, основываясь на ответе неврологов:
Минимальный рабочий пример с этим кодом выглядит так:
from waflib import Task, TaskGen, Configure
Configure.autoconfig = True
def configure(cnf):
cnf.path.get_src().make_node('a/wscript').write('')
def build(bld):
bld(features='write_file')
class xyz(Task.Task):
def run(self):
self.generator.path.get_bld().find_or_declare(self.outputs[0].abspath()).write('')
@TaskGen.feature('write_file')
def make_tasks(self):
srcs = bld.path.ant_glob('**/wscript', excl='build')
for src in srcs:
build_dir_of_src = src.get_bld().parent
my_sub_node = build_dir_of_src.make_node('xyz')
my_sub_node.mkdir()
tgt_basename = src.name
tgt = my_sub_node.make_node(tgt_basename)
tsk = self.create_task('xyz', src=src, tgt=tgt)
Проблема в том, что это создает следующее:
build\xyz\wscript
build\a\xyz\wscript
Но я хочу это:
build\xyz\wscript
build\xyz\a\wscript
Так что я просто создаю папку xyz
между build
и чем бы то ни было tgt. Так точно поведение variant
в BuildContext
.