Waf: создание задачи для многих файлов
Есть ли лучший / более короткий способ создания этих двух задач, которые работают с несколькими файлами? я бы предпочел new_task_generator
вместо загадочных классов.
Files = ["src1.c", "src2.c"]
for File in Files:
bld.new_task_gen(
name = "Proc1_task",
source = File,
target= File + ".p1",
rule ="Proc1.exe ${SRC} > ${TGT}")
for File in Files:
bld.new_task_gen(
name = "Proc2_task",
after = "Proc1_task", # not parallel with Proc1_task
source = File,
target= File + ".p2",
rule ="Proc2.exe ${SRC} > ${TGT}")
Proc1.exe
а также Proc2.exe
принимайте только один файл за звонок.
1 ответ
Решение
Если ваши исходные файлы имеют конкретное расширение, например.c, самый простой способ - добавить хук к этому расширению:
@extension('.c')
def process_my_extension(self, node):
task1 = self.create_task("task1", node, node.change_ext(".p1"))
task2 = self.create_task("task2", node, node.change_ext(".p2"))
task2.set_run_after(task1)
class task1_task(Task.Task):
run_str = "Proc1.exe ${SRC} > ${TGT}"
ext_in = ['.c']
ext_out = ['.p1']
class task2_task(Task.Task):
run_str = "Proc2.exe ${SRC} > ${TGT}"
ext_in = ['.c']
ext_out = ['.p2']
Лучше всего сделать это в определенном файле (mytool.py), который вы загружаете в свой основной wscript:
def configure(conf):
conf.load("mytool", tooldir = ".") # load your mytool.py
def build(bld):
bld(
source = ["src1.c", "src2.c", ],
)