如何使用scons构建任意食谱?

时间:2017-07-19 14:16:30

标签: python makefile scons

我想要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))

1 个答案:

答案 0 :(得分:2)

这听起来像是要编写/定义自己的 Builder ,用SCons的说法来讲。请查看我们的ToolsForFools Guide,它会尝试解释如何教授新的&#34;构建食谱&#34;到SCons。注意,如何始终指定真正的Python 可调用(例如函数),而不仅仅是 Action 的字符串。您可能还想查看MAN page(特别是关于&#39; Action Objects&#39;的部分)和User Guide,以便更好,更详尽地介绍此构建系统。

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