如何在SCons脚本中获取当前运行的SCons可执行文件路径?
SCons构建时获取当前运行SCons路径的实现方案
针对构建外部SCons项目时遇到的PATH不生效、调用SCons版本不一致问题,可直接读取当前运行进程的路径参数解决,无需依赖额外环境变量。
核心获取方法
SCons基于Python运行,通过Python标准库sys模块即可拿到当前运行的SCons入口绝对路径,该值完全匹配当前执行构建用的SCons版本,不会出现调用其他路径版本的问题:
import sys import os # 拿到启动当前SCons进程的入口真实路径,自动适配绝对路径/相对路径/别名/虚拟环境调用场景 current_scons_entry = os.path.realpath(sys.argv[0])
- 该写法不依赖系统
PATH变量检索命令,拿到的路径可直接执行 - 无论用户通过自定义路径、虚拟环境还是系统默认路径启动SCons,获取的都是当前正在运行的SCons程序路径,从根源规避版本不一致问题
修正后的外部项目构建写法
替换原有硬编码scons命令的Command调用即可:
import sys import os env = Environment() current_scons = os.path.realpath(sys.argv[0]) # 声明外部项目可执行文件构建规则 external_bin = env.Command( target='other_project_dir/executable', source=None, action=f'"{current_scons}" -C ${TARGET.dir}' ) # 将外部生成的可执行文件绑定到当前项目的构建依赖,保证构建执行顺序 env.Depends('your_current_project_build_target', external_bin)
特殊场景适配
如果你是通过python -m SCons方式启动SCons(即直接调用Python模块而非scons可执行脚本),可改用当前Python解释器路径调用SCons模块,兼容性更好:
import sys current_python = sys.executable # 对应构建动作替换为: # action=f'"{current_python}" -m SCons -C ${TARGET.dir}'
内容的提问来源于stack exchange,提问作者Piotr Siupa
相关产品推荐
相关产品推荐

