【问题标题】:Compiling using VS tools and Tup build-system使用 VS 工具和 Tup 构建系统进行编译
【发布时间】:2017-01-02 03:19:54
【问题描述】:

我正在尝试为 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 的方法吗?还是我应该联系拆箱开发人员并让他将该文件添加到数据库中?

非常感谢任何帮助。

【问题讨论】:

  • 如果堆栈溢出是该工具的支持论坛,那么您就在这里。如果不是 - 不是。那你怎么看?

标签: c visual-studio-2015 tup


【解决方案1】:

Christian Fillion 在this comment 中给出了解决方案。


This Microsoft page 解释了该文件的用途以及如何防止 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 忽略某些输出,无论是在系统或用户基础上还是在 Tupfile 中。

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

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

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 2012-09-10
    • 1970-01-01
    • 2013-10-21
    • 2020-02-16
    • 2012-06-28
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    相关资源
    最近更新 更多