如何让SCons替换已安装文本文件中的文本

Joh*_*ote 5 variables templates install replace scons

我希望能够在从scons安装一些python脚本时替换模板变量('$(SOFTWARE_VERSION)').scons已经有这样的功能吗?如果没有,那么挂钩scons安装过程的最佳方式是什么,所以我可以在安装过程中执行此操作?

ric*_*chq 6

你可以使用这个Substfile方法.这将获取输入文件并生成替换标记变量的输出文件.所以如果你有script.py.in:

#!/usr/bin/python
print "$SOFTWARE_VERSION"
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下SConsctruct文件生成输出:

env = Environment(tools=['textfile'])
script_dict = {'\$SOFTWARE_VERSION': '1.0'}
env.Substfile('script.py.in', SUBST_DICT = script_dict)
Run Code Online (Sandbox Code Playgroud)

您需要$在字符串中转义,'\$SOFTWARE_VERSION'否则SCons会将其解释为内部环境变量.结果将是script.py包含此内容的文件:

#!/usr/bin/python
print "1.0"
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用安装此结果替换文件env.Install.


Ben*_*enG 0

您可以定义一个构建器,它将模板文件作为输入并生成替换的数据作为输出。最灵活的方法是使用 Python 函数作为构建器的 Action。这样您就可以使用 Python 丰富的正则表达式支持来执行替换。至于变量及其值,您可以从函数的“env”参数中利用构造变量。如果所有变量恰好都是构造变量,您可以使用 env.subst() 为您进行搜索和替换。

或者,如果这是一次性的,您可以简单地使用一个命令来执行“sed”或类似程序并为您完成所有工作。