Удалённая сборка C++ через VPN: держите цепочку инструментов на хосте
Подключить общий каталог — не то же самое, что собирать удалённо. Проверьте, какой хост отвечает, какой компилятор запускается и где живут отладчик и сеть.
Общий каталог подключён, редактор открывает файл, а сборка всё равно идёт на ноутбуке. Ошибок нет, и именно это сбивает с толку. Удалённый путь — не удалённая цепочка инструментов, и редактор, умеющий читать файл через монтирование, с удовольствием вызовет для него локальный компилятор. Решение — перенести рабочее пространство, а не только байты.
Смонтированный каталог — не рабочее пространство
Монтирование по SSH или SMB даёт путь. Приходят ли компилятор, система сборки и отладчик с удалённой стороны, зависит от того, где редактор решит их запускать. Многие конфигурации читают удалённые файлы и компилируют их локально, а затем падают на заголовочном файле, который есть только на сервере.
Симптом тонкий: сборка проходит с частичными результатами или ломается на пути включения, который в редакторе выглядит правильным.
Докажите, какой хост отвечает
Подключитесь настоящей удалённой сессией, а не монтированием, затем выполните три команды только для чтения в терминале, который даёт эта сессия. Руководство по SSH в VS Code описывает, что терминал в подключённом удалённом окне работает на удалённом хосте и что та же сессия несёт отладку. Сначала получите одобрение на удалённые компоненты, если организация их ограничивает.
hostname называет машину, на которой вы находитесь, pwd показывает, где на самом деле живёт рабочее пространство, а command -v c++ печатает компилятор, который запустила бы оболочка. Все три ответа должны описывать сервер, а не ноутбук.
Они не доказывают, что версия или конфигурация сборки верны. Сравните это с инструкциями самого проекта как отдельный шаг.
Проследите одно изменение через сборку и отладку
Внесите небольшое изменение в удалённое рабочее пространство и сохраните его там. Запустите документированную сборку из того же каталога и убедитесь, что вывод отражает ваше изменение, а не более старую копию в другом месте. Затем запустите отладчик через ту же удалённую сессию, направив путь к бинарнику и рабочий каталог в дерево сборки сервера. Совпадение путей к исходникам важно, потому что отладчик, сопоставляющий ваше изменение с путём на ноутбуке, отлаживает другой файл.
Если цель отладки сообщает о путях, начинающихся с вашего локального домашнего каталога, конфигурация запуска всё ещё думает локально.
Сетевые зависимости остаются на хосте
Загрузка пакета, операция git или запуск тестов на хосте сборки использует сеть и учётные данные этого хоста, а не VPN-сессию вашего ноутбука. То, что ноутбук достигает частного зеркала пакетов, ничего не говорит о том, может ли это сервер. Если сборке нужен реестр, серверу нужен маршрут к нему, и это разговор про межсетевой экран, а не настройка редактора.
Обратное тоже верно для тестовых приложений. Добраться до службы на сервере из браузера — отдельное соединение, которому нужен одобренный частный путь или ограниченная переадресация, а не открытый слушатель.
Отключитесь, не потеряв работу
Сохраните и закоммитьте или хотя бы зафиксируйте рабочее дерево, прежде чем соединение упадёт. Удалённая сессия редактирования не обещает, что идущая сборка или несохранённый буфер переживут обрыв сети. Для всего, что должно жить дольше вашей сессии, используйте поддерживаемый проектом процесс заданий или сессий.
Тогда разделение труда очевидно: ноутбук — интерфейс, сервер владеет рабочим пространством и цепочкой инструментов, а VPN обеспечивает маршрут. Переносить файлы и переносить сборку — два разных решения.