【问题标题】:How to use scons to build arbitrary recipes?如何使用 scons 构建任意配方?
【发布时间】:2017-07-19 14:16:30
【问题描述】:

我想要一个替代 Make 的方法,我可以轻松地使用一些 Python 代码来生成一些中间文件。

我遇到了声称与 Make 相似的 Scons。我想将这种 Makefile 翻译成 Scons,其中对 Python 的调用将在 Scons 本身中完成。

.PHONY all clean mrproper

all: out

A=$(wildcard *.a)
B=$(A:.b=.a)
C=$(B:.c=.b)
D=$(wildcard *.d)
C=$(D:.c=.d)

-include $(wildcard *.dep) 

*.b : *.a
    python -mfoo a2b $< -o $@ -M $@.dep

*.c : *.b
    python -mfoo b2c $< -o $@

*.e : *.d
    python -mfoo d2e $< -o $@

out: $(E) $(C)
    python -mfoo out $^ -o $@

clean: 
    $(RM) $(B) $(C) $(E)

mrproper: clean
    $(RM) out *.dep

可以这样做吗?我对可行的解决方案不感兴趣,只对我需要开始的构建块感兴趣。

我缺少的是 Scons 提供了诸如

之类的助手
env.Program(target = 'helloworld', source = ["helloworld.c"])

适用于标准扩展(*.c*.s、...)。不幸的是我不想做一个程序,我想指定配方。换句话说,我正在寻找更像这样的东西:

env.append(env.Recipe(target='%.b', deps=['out/%.a', 'out'], builder=foo_a2b))

【问题讨论】:

    标签: python makefile scons


    【解决方案1】:

    这听起来像是您想编写/定义自己的Builder,用 SCons 的说法。请查看我们的ToolsForFools Guide,它试图解释如何向 SCons 教授新的“构建配方”。请注意,您如何始终指定一个真正的 Python callable(例如一个函数),而不是一个 Action 的单纯字符串。您可能还想查看MAN page(尤其是关于“操作对象”的部分)和User Guide,以更好、更详尽地介绍此构建系统。

    最后,欢迎加入我们的User mailing list scons-users@scons.org 并在那里提出后续问题。我们的社区总是渴望提供帮助......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多