SConstruct 101——从 Makefile 继续
SConstruct 101—moving on from Makefiles
赞
make
,
scons
有大量的预定义变量和规则。 (在包含 env = Environment(); print(env.Dump())
的 SConstruct
上尝试 scons | wc
以查看集合的扩展程度。)
但是假设我们不是在追求预设的魔法,而是想做一些更原始的事情——模拟从(bash,等)命令行启动一些指令?
还假设我们对默认 Decider('MD5')
非常满意。 one-souce-one-target的翻译是什么:
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 或用户邮件列表
直接访问社区
赞
make
,
scons
有大量的预定义变量和规则。 (在包含 env = Environment(); print(env.Dump())
的 SConstruct
上尝试 scons | wc
以查看集合的扩展程度。)
但是假设我们不是在追求预设的魔法,而是想做一些更原始的事情——模拟从(bash,等)命令行启动一些指令?
还假设我们对默认 Decider('MD5')
非常满意。 one-souce-one-target的翻译是什么:
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 或用户邮件列表
直接访问社区