如何在Boost Build/b2/bjam中设置JAMSHELL?设置无效问题排查
JAMSHELL变量在Jamroot中设置无效的解决办法
问题根因
在MSVC编译环境下,B2默认直接调用编译器执行编译任务,不会触发外部shell调用,因此Jamroot中设置的JAMSHELL变量不会生效。这个变量仅在B2需要通过shell执行脚本类命令(比如批量文件操作、自定义shell脚本)时才会被读取。
有效修改方式
要让B2使用自定义shell,必须通过以下两种方式之一传递变量:
- 命令行参数直接指定:
b2 JAMSHELL="cmddd /C %" - 设置系统环境变量:
在命令行中先设置环境变量,再启动B2:set JAMSHELL=cmddd /C % b2
验证自定义shell是否生效
如果需要确认JAMSHELL是否正常工作,可以在Jamroot中添加一个需要shell执行的自定义动作:
actions TestCustomShell { echo "Running via custom shell" } TestCustomShell verify_shell ;
运行B2时,若指定的cmddd不存在,就会触发报错,以此验证变量是否生效。
内容的提问来源于stack exchange,提问作者Gabriel Devillers
相关产品推荐
相关产品推荐

