6

我正在尝试为 J 编程语言编译一个名为“unbox”的解释器,可以在以下位置找到:https ://github.com/iocane/unbox

它使用 tup 构建系统和 github 指令指定使用 Visual Studio 工具提示符下的 tup 命令。我下载了 Visual Studio 2015 Community,但它没有提供说明中提到的确切提示,因此我使用了 VS2015 x86 x64 Cross Tools 命令提示符。安装 tup 并将其添加到我的路径后,我导航到克隆“unbox”并输入 tup 的目录

但是,这是问题开始的地方,在输入 tup 后,我得到以下信息:

*   1) CC src/libj\a.c
a.c
 *** tup errors ***
tup error: File 'C:\Users\I\AppData\Local\Microsoft\VSCommon\14.0\SQM\VCToolsTelemetry.dat' was written to, but is not in .tup/db. You probably should specify it as an output
 *** Command ID=663 ran successfully, but tup failed to save the dependencies.
*   2) CC src/libj\af.c
af.c
 *** tup errors ***
tup error: File 'C:\Users\I\AppData\Local\Microsoft\VSCommon\14.0\SQM\VCToolsTelemetry.dat' was written to, but is not in .tup/db. You probably should specify it as an output
 *** Command ID=667 ran successfully, but tup failed to save the dependencies.
*   3) CC src/libj\ai.c
ai.c
 *** tup errors ***
tup error: File 'C:\Users\I\AppData\Local\Microsoft\VSCommon\14.0\SQM\VCToolsTelemetry.dat' was written to, but is not in .tup/db. You probably should specify it as an output
 *** Command ID=669 ran successfully, but tup failed to save the dependencies.
*   4) CC src/libj\ab.c
ab.c
 *** tup errors ***
tup error: File 'C:\Users\I\AppData\Local\Microsoft\VSCommon\14.0\SQM\VCToolsTelemetry.dat' was written to, but is not in .tup/db. You probably should specify it as an output
 *** Command ID=665 ran successfully, but tup failed to save the dependencies.
 [                                        ETA~=30s Remaining=130 Active=0                                        ]   2%
 *** tup: 4 jobs failed.

如您所见,文件 VCToolsTelemetry.dat 未在 tup 的数据库中指定。

有谁知道阻止 Visual Studio 使用 VSToolsTelemetry.dat 的方法吗?还是我应该联系拆箱开发人员并让他将该文件添加到数据库中?

任何帮助深表感谢。

4

1 回答 1

1

Christian Fillion 在此评论中给出了解决方案。


此 Microsoft 页面解释了该文件的用途以及如何防止 Visual Studio 工具写入该文件:

默认情况下,Visual Studio 安装启用客户反馈。您可以通过将以下注册表项的值更改为字符串“0”来配置 Visual Studio 以禁用个别计算机上的客户反馈。

所指的关键是OptIn。根据该页面,它位于 中HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\VisualStudio\SQM,尽管它也可能位于HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VSCommon\14.0\SQM(我的 Windows 10 笔记本电脑就是这种情况)。

在此处输入图像描述

(微软页面也说它应该是一个字符串,但在我的情况下它是一个 DWORD 并且它工作正常。)


还是我应该联系拆箱开发人员并让他将该文件添加到数据库中?

发生的事情是 Tup,一个基于文件的构建系统,要求指定命令的所有输出,但这个文件没有,所以当 Tup 检测到它被写入时会抱怨。对于 Tup,创建和写入文件没有区别——在这两种情况下,它都是一个“输出”。因此,Tup 不能处理多个命令写入同一个文件的情况。这通常会导致缓存出现问题,缓存被设计为增量写入。如果我没记错的话,Tup 实施了一种解决方法,它忽略了路径包含任何带有前导句点的组件的输出文件。在 Linux 环境中,名称以句点开头的目录被认为是“隐藏的”,这与在 Windows 中不同,在 Windows 中,此功能是通过文件系统属性实现的。因此,这种解决方法通常会在不依赖此类命名约定的 Windows 原生工具上失败。Tup 方面更灵活的解决方案是告诉 Tup 忽略某些输出,无论是在系统或用户基础上,还是从 Tupfiles 内。

不可能将此文件列为输出,因为它将成为所有 CL.EXE(可能还有其他 Visual Studio 工具)调用的输出,这对于 Tup 的设计没有意义。绝对没有打算在其中为由同一命令读取和写入的文件腾出空间,因为不可能自动化这种情况。即使这个文件只是被写入,我认为没有打算支持增量写入的输出。

由于该项目似乎致力于某些平台并为其提供构建说明,因此向他们指出问题和解决方案似乎是合理的,以便他们可以将其包含在说明中。

于 2016-09-11T15:57:46.060 回答