gpt4 book ai didi

c++ - 使用 Bazel 运行使 GetTempPath 返回 C :\Windows\

转载 作者:行者123 更新时间:2023-11-30 05:09:16 31 4
gpt4 key购买 nike

我有一个调用 GetTempPathW 并尝试在返回的目录中创建临时文件的测试。当我直接运行测试时,GetTempPathW 返回 C:\Users\sgreens\AppData\Local\Temp\ 并通过。当我使用 bazel test 运行它时,它返回 C:\Windows\ 并且测试无法在那里创建文件。

来自documentation of GetTempPath :

The GetTempPath function checks for the existence of environment variables in the following order and uses the first path found:

  1. The path specified by the TMP environment variable.
  2. The path specified by the TEMP environment variable.
  3. The path specified by the USERPROFILE environment variable.
  4. The Windows directory.

在 cmd 窗口中,我从以下位置运行 bazel:

C:\Users\sgreens\yeti\yeti>echo %TMP%
C:\Users\sgreens\AppData\Local\Temp

C:\Users\sgreens\yeti\yeti>echo %TEMP%
C:\Users\sgreens\AppData\Local\Temp

C:\Users\sgreens\yeti\yeti>echo %USERPROFILE%
C:\Users\sgreens

C:\Users\sgreens\yeti\yeti>echo %WINDIR%
C:\WINDOWS

在我构建时生成的CROSSTOOL中:

  env_entry {
key: "TMP"
value: "C:\\Users\\sgreens\\AppData\\Local\\Temp"
}
env_entry {
key: "TEMP"
value: "C:\\Users\\sgreens\\AppData\\Local\\Temp"
}

Bazel 做了什么导致 GetTempPath 返回 C:\Windows\?我该如何解决?

可能相关的问题: '$' sign in the output base make all tests failed on windows

最佳答案

当您直接运行测试时,您是在正常的命令环境中运行它。测试会看到与您相同的环境变量,即它使用您打印的 TMP/TEMP 变量。

当您使用 bazel test 运行测试时,Bazel 会在精简的环境中运行它,并定义尽可能少的环境变量。 Bazel 这样做是为了使测试尽可能可重现:如果测试依赖于客户端环境,那么更改环境变量可能会使其通过或使其失败,我们不希望出现这种不可预测的行为。

这是一个已知问题,我正在积极解决它:https://github.com/bazelbuild/bazel/issues/2870

您的解决方法是使用 --test_env=TMP。此标志告诉 Bazel 将您的 TMP 值复制到测试环境。

关于c++ - 使用 Bazel 运行使 GetTempPath 返回 C :\Windows\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46286540/

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