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

How to use scons to build arbitrary recipes?

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

这听起来像是您想 write/define 自己的 Builder,用 SCons 的说法来说。请查看我们的 ToolsForFools Guide which tries to explain how you can teach new "build recipes" to SCons. Note, how you can always specify a true Python callable (e.g. a function) instead of a mere string for an Action. You may also want to check out the MAN page (especially the section about 'Action Objects') and the User Guide 以更好、更详尽地介绍此构建系统。

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