【发布时间】:2013-08-15 16:39:17
【问题描述】:
嘿,我已经编写了一个自定义构建器,它对我的 .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:建立目标 ...
scons: `mods/mod_dummy.c' 没有什么可做的。
scons:完成构建目标。
它是 COMMAND_LINE_TARGETS 中的目标之一,但由于某种原因它没有进入此循环。一定有办法实现这一点。
如何修改代码以仅适用于其中之一?
【问题讨论】:
-
您是否进行了清理以确保它确实需要构建一些东西?
标签: python command-line build scons