我正在尝试使用 clang-cl 工具链实现我自己的模块以在 Windows 上构建 C++,因为目前 QBS 中没有内置支持。
我选择使用 lld-link 而不是 microsoft 链接器,因此我必须手动为其提供所有 MS 库包含路径。通过硬编码这些路径,我可以很好地构建我的应用程序。但我想让我的模块更灵活,并使用由|%LIB%
设置的环境变量。vcvars32.bat
vcvars64.bat
据我了解,这可以(应该?)在模块的setupBuildEnvironment
脚本中完成。这是我尝试阅读%LIB%
并失败的内容:
import qbs.Environment
import qbs.Process
Module
{
setupBuildEnvironment:
{
var p = new Process();
p.exec("vcvars64.bat", [], true);
// makes no difference
// p.exec("cmd", ["/c", "vcvars64.bat"], true);
var lib = p.getEnv("LIB");
// this fails too
// var lib = Environment.getEnv("LIB");
console.info("LIB = " + lib);
p.close();
}
...
}
这给了我LIB =
,所以我无处可去。我的猜测是,在查询变量 ( ) 时进程已经终止p.getEnv("LIB")
,因此结果为空。QBS 文档Process.getEnv()
在这方面没有任何说明。
初始化环境的正确 QBS 方法是vcvars64.bat
什么,更广泛地说,获取内部进程环境的正确方法是什么setupBuildEnvironment
?
[更新]
好吧,尴尬的是,这很容易通过创建一个简单的批处理并完全摆脱setupBuildEnvironment
脚本来解决:
@echo off
call vcvars64 && qbs
但我想尽可能避免批处理脚本,所以问题仍然存在。