指定自定义scon构建器的目标

时间:2013-08-15 16:39:17

标签: python command-line build scons

嘿,我编写了一个自定义构建器,它对我的​​.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中的目标之一,但由于某种原因它不会进入此循环。必须有办法实现这一目标 如何修改代码只适用于其中一个?

1 个答案:

答案 0 :(得分:0)

您只需在命令行上指定目标节点,而不是节点。

scons -u abc.postc