如何解决SConstruct 101——从 Makefile 开始
喜欢
make
,
scons
有大量预定义的变量和规则。 (在包含 scons | wc
的 SConstruct
上尝试 env = Environment(); print(env.Dump())
以查看该集合的扩展程度。)
但是假设我们不是追求预设的魔力,而是想要做一些更原始的事情——模拟从(bash 等)命令行启动一些指令?
还假设我们对默认的 Decider('MD5')
很满意。一源一目标的翻译是什么:
out/turquoise.xyz: out/chartreuse.xyz
chartreuse_to_turquoise $< $@
二源一目标:
out/purple.xyz: out/lilac.xyz out/salmon.xyz
gen_purple $< $@
和:
run_this:
python prog.py
我们将通过键入 make run_this
按需运行哪个?
这些基本结构的 SConstruct
是什么样的?
解决方法
您正在寻找的所有答案都在用户指南(和联机帮助页)中
首先,假设您不想扫描输入文件以添加输入文件中指定的包含文件,您可以使用Commmand()
(在此处查看信息:https://scons.org/doc/production/HTML/scons-user.html#chap-builders-commands)
然后你需要一个别名来指定一个非文件命令行目标 (请参阅此处:https://scons.org/doc/production/HTML/scons-user.html#chap-alias)
将这两者放在一起产生收益
env=Environment()
# one source,one target
env.Command('out/turquoise.xyz','out/chartreuse.xyz','chartreuse_to_turquoise $SOURCE $TARGET')
# Two source,one target
env.Command('out/purple.xyz',['out/lilac.xyz','out/salmon.xyz'],'gen_purple $SOURCES $TARGET')
# And your .phony make target which is actually not great for reproducibility and determining when it should be rerun,because you do not specify any sources or targets
env.Alias('run_this','python prog.py')
注意:SCons 不会传播您的 shell 环境变量。因此,如果您依赖(例如)PATH 中的非系统路径,则例如需要在 env['ENV']['PATH'] 中明确指定。如需了解更多详情,请阅读用户指南、联机帮助页和常见问题解答。
- https://scons.org/doc/production/HTML/scons-user.html
- https://scons.org/doc/production/HTML/scons-man.html
- https://scons.org/faq.html
您可以通过我们的 discord server、IRC channel 或用户邮件列表直接联系社区
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。