1

嘿,我已经编写了一个自定义构建器,它对我的​​ .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/ 我指定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: Building targets ...
scons: Nothing to be done for `mods/mod_dummy.c'。
scons:完成构建目标。

它是 COMMAND_LINE_TARGETS 中的目标之一,但由于某种原因它没有进入此循环。必须有一种方法来实现这一点。
我如何修改代码以仅适用于其中之一?

4

1 回答 1

0

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

scons -u abc.postc
于 2013-10-21T18:28:22.603 回答