嘿,我编写了一个自定义构建器,它对我的.c文件和.structdoc文件应该有不同的工作方式。 这是SConstruct文件
env = Environment()
prepare_structdoc = Builder(action='python prep_structdoc.py < $SOURCE > $TARGET', suffix='.structdoc', src_suffix='.c')
prepare_postc = Builder(action='python preprocess_mods.py < $SOURCE > $TARGET', suffix='.postc', src_suffix='.structdoc')
env['BUILDERS']['StructdocBuilder'] = prepare_structdoc
env['BUILDERS']['PostcBuilder'] = prepare_postc
SConscript('mods/SConscript', exports='env')
这些构建器在一个源上运行并生成一个目标,所以我在SConscript中运行所有* .c文件中的循环
Import("env")
for fname in Glob("*.c"):
struct_doc= env.StructdocBuilder(source=fname)
post_c = env.PostcBuilder(source=struct_doc)
这就是诀窍。但是,如果我提到的话,我希望它只将这些构建器用于一个文件。即在mods / i中指定scons -u abc.c
。
我尝试过使用COMMAND_LINE_TARGETS,如下所示:
Import("env")
for fname in COMMAND_LINE_TARGETS or Glob("*.c"):
struct_doc= env.StructdocBuilder(source=fname)
post_c = env.PostcBuilder(source=struct_doc)
scons -u mod_dummy.c
但它给我的输出是
scons:建立目标......
scons:对于`mods / mod_dummy.c'没什么可做的
scons:完成了建筑目标。
它是COMMAND_LINE_TARGETS中的目标之一,但由于某种原因它不会进入此循环。必须有办法实现这一目标 如何修改代码只适用于其中一个?
答案 0 :(得分:0)
您只需在命令行上指定目标节点,而不是源节点。
scons -u abc.postc