QBS 构建系统,无法使用 vcvars64.bat 初始化环境
QBS build system, can't initialize environment with vcvars64.bat
我正在尝试使用 clang-cl 工具链在 Windows 上实现我自己的模块来构建 C++,因为目前 QBS 中没有内置支持。
我选择使用 lld-link 而不是 Microsoft linker,所以我必须手动为它提供所有 MS 库包含路径。通过对这些路径进行硬编码,我成功地构建了我的应用程序。但我想让我的模块更灵活,并使用由 vcvars32.bat
|vcvars64.bat
设置的 %LIB%
环境变量
据我所知,这可以(应该?)在模块的 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")
) 时已经终止,因此结果为空。 Process.getEnv()
的 QBS 文档在这方面没有任何说明。
使用 vcvars64.bat
初始化环境的正确 QBS 方法是什么,更广泛地说,在 setupBuildEnvironment
中获取进程环境的正确方法是什么?
[更新]
好吧,令人尴尬的是,这很容易通过创建一个简单的批处理并完全摆脱 setupBuildEnvironment
脚本来解决:
@echo off
call vcvars64 && qbs
但我想尽可能避免批处理脚本,所以问题仍然存在。
vars 批处理文件只是将一些信息转储到控制台上。这不会以任何方式在调用进程上设置环境。您需要解析流程输出。我建议您查看 qbs 源中的 MsvcProbe 项,了解它是如何为 MSVC 实现的。您也许可以调整 clang-cl 的代码。
我正在尝试使用 clang-cl 工具链在 Windows 上实现我自己的模块来构建 C++,因为目前 QBS 中没有内置支持。
我选择使用 lld-link 而不是 Microsoft linker,所以我必须手动为它提供所有 MS 库包含路径。通过对这些路径进行硬编码,我成功地构建了我的应用程序。但我想让我的模块更灵活,并使用由 vcvars32.bat
|vcvars64.bat
%LIB%
环境变量
据我所知,这可以(应该?)在模块的 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")
) 时已经终止,因此结果为空。 Process.getEnv()
的 QBS 文档在这方面没有任何说明。
使用 vcvars64.bat
初始化环境的正确 QBS 方法是什么,更广泛地说,在 setupBuildEnvironment
中获取进程环境的正确方法是什么?
[更新]
好吧,令人尴尬的是,这很容易通过创建一个简单的批处理并完全摆脱 setupBuildEnvironment
脚本来解决:
@echo off
call vcvars64 && qbs
但我想尽可能避免批处理脚本,所以问题仍然存在。
vars 批处理文件只是将一些信息转储到控制台上。这不会以任何方式在调用进程上设置环境。您需要解析流程输出。我建议您查看 qbs 源中的 MsvcProbe 项,了解它是如何为 MSVC 实现的。您也许可以调整 clang-cl 的代码。