Компиляция с использованием инструментов VS и Tup build-system

Я пытаюсь скомпилировать интерпретатор для языка программирования J под названием "unbox", который можно найти по адресу: https://github.com/iocane/unbox

Он использует систему сборки tup, и инструкции github указывают на использование команды tup из приглашения инструментов Visual Studio. Я скачал 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? Или я должен связаться с разработчиком unbox и попросить его добавить этот файл в БД?

Буду признателен за любую оказанную помощь.

1 ответ

Решение было дано Кристианом Филлионом в этом комментарии.


На этой странице Microsoft объясняется, для чего этот файл и как предотвратить запись в него инструментов Visual Studio:

По умолчанию установка Visual Studio обеспечивает обратную связь с клиентами. Вы можете настроить Visual Studio на отключение обратной связи с клиентами на отдельных компьютерах, изменив значение следующего раздела реестра на строку "0".

Упомянутый ключ OptIn, Согласно этой странице, он находится в HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\VisualStudio\SQMхотя это также может быть в HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VSCommon\14.0\SQM (это было в моем ноутбуке с Windows 10).

(На странице Microsoft также написано, что это должна быть строка, но в моем случае это DWORD, и она отлично работает.)


Или я должен связаться с разработчиком unbox и попросить его добавить этот файл в БД?

Происходит то, что Tup, файловая система сборки, требует, чтобы были указаны все выходные данные команды, а этот файл - нет, и поэтому Tup жалуется, когда обнаруживает, что он записан. Для Tup нет разницы между созданием и записью в файл - в обоих случаях это "вывод". Таким образом, Tup не обрабатывает ситуации, когда несколько команд записывают в один файл. Это часто вызывает проблемы с кешами, которые предназначены для поэтапной записи. Если я правильно помню, в Tup реализован обходной путь, при котором он игнорирует выходные файлы, путь которых содержит любой компонент с начальным периодом. В средах Linux каталог, имя которого начинается с начального периода, считается "скрытым", в отличие от Windows, где эта функция реализована с атрибутом файловой системы. Таким образом, этот обходной путь, как правило, не работает с собственными инструментами Windows, которые не полагаются на такое соглашение об именах. Более гибким решением на стороне Tup было бы указание Tup игнорировать определенные выходные данные, как в системе, так и на уровне пользователя или из Tupfiles.

Невозможно перечислить этот файл в качестве выходного, потому что он станет выходом всех вызовов CL.EXE (и, возможно, других инструментов Visual Studio), и это не имеет смысла для дизайна Tup. В нем определенно нет намерения выделять место для файлов, которые считываются и записываются одной и той же командой, поскольку автоматизировать такой сценарий невозможно. Даже если этот файл был только записан, я думаю, что нет намерений поддерживать инкрементно записанные результаты.

Поскольку проект, похоже, предназначен для некоторых платформ и предоставляет для них инструкции по сборке, представляется разумным указать на проблему и решение для них, чтобы они могли включить ее в инструкции.

Другие вопросы по тегам