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