Опираясь на ответ Roboprog: более общее решение вашей проблемы - обновить make-файлы в «общих целях», чтобы они включали элементы из «общего источника» по ссылке, а не полагались на то, что система SCC сделает это для их.
Если общая функциональность может быть легко разложена в библиотеке (сборка, jar, заголовки C ++ + библиотеки), то отлично! Это поможет всем в долгосрочной перспективе. Теперь библиотеку можно тестировать модульно с помощью различных автономных инструментов; потребляя это также становится легче теперь, когда контракты с обеих сторон стандартизированы. Кроме того, теперь вы можете относиться к библиотеке как к первоклассному управлению изменениями WRT. Разрывные изменения могут быть внесены в их собственную ветку; исправления других групп, которые совместно используют код, могут распространяться по хранилищу вместе с остальной частью вашего приложения; и т. д.
Но ничего из этого не является строго необходимым. Даже если вы делаете все в одной ветке, или даже если рассматриваемый общий ресурс представляет собой один файл foo.h, вы можете продолжать использовать существующие методы SCM с помощью всего нескольких настроек. Каждая система сборки, с которой я когда-либо сталкивался, способна включать файл из модуля A в модуль B, если относительный путь верен. Если вы используете * proj make-файлы Visual Studio, самый быстрый способ сделать это - Добавить -> Существующий элемент -> перейти к исходному файлу -> нажать стрелку раскрывающегося списка на кнопке Сохранить -> Добавить как ссылку.