【问题标题】:specifying targets for a custom scon builder为自定义 scon 构建器指定目标
【发布时间】: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


【解决方案1】:

您只需要在命令行中指定 target 节点,而不是 source 节点。

scons -u abc.postc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2019-06-27
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多