Когда вы используете декоратор Taskgen.after
, вы просто указываете waf запустить метод add_size
после метода apply_link
на этапе генерации задачи.Поскольку ваш генератор задач ничего не связывает, у вас нет метода apply_link
, он вам не нужен.
Ваша проблема в том, что вы используете ant_glob
в каталоге сборки.В первый раз в нем ничего нет, поэтому ant_glob
ничего не возвращает, поэтому ваша задача не имеет ничего общего:)
Вы должны добавить функцию в генератор задач, которая создает объекты, размер которых вы хотите изменить,Например:
@feature("size") # or feature("*") for every taskgen
@after('apply_link')
def process_sizes(self):
if getattr(self, "link_task", None) is None:
return
objets_to_size = []
objects_to_size.extend(self.link_task.inputs) # object files
objects_to_size.extend(self.link_task.outputs) # exe, libs ...
for node in objects_to_size:
out = node.change_ext('.log')
self.create_task("size", node, out)
Для использования:
bld.program(source = "main.c", features = "size", target = "myexe")
Вы получите размер всех файлов процесса ссылки.
@Taskgen.extension
используется толькоTaskgen.process_source
, которые обрабатывают атрибут source
генератора задач.Он плохо работает с промежуточными объектами, не указанными в wscript.