gpt4 book ai didi

c++ - QBS 构建系统,无法使用 vcvars64.bat 初始化环境

转载 作者:行者123 更新时间:2023-11-28 04:26:04 25 4
gpt4 key购买 nike

我正在尝试实现我自己的模块以使用 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") )时已经终止,因此结果为空。 Process.getEnv() 的 QBS 文档在这方面什么都不说。

使用 vcvars64.bat 初始化环境的正确 QBS 方法是什么? ,更广泛地说,在 setupBuildEnvironment 中获取进程环境的正确方法是什么? ?


[更新]好吧,令人尴尬的是,这很容易通过创建一个简单的批处理并摆脱 setupBuildEnvironment 来解决。全部脚本:

 @echo off
call vcvars64 && qbs

但我想尽可能避免批处理脚本,所以问题仍然存在。

最佳答案

vars 批处理文件只是将一些信息转储到控制台上。这不会以任何方式在调用进程上设置环境。您需要解析流程输出。我建议您查看 qbs 源中的 MsvcProbe 项,了解它是如何为 MSVC 实现的。您也许能够为 clang-cl 调整代码。

关于c++ - QBS 构建系统,无法使用 vcvars64.bat 初始化环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com