В дополнение к
вопросу про билд интересует кто как решает следующий вопрос:
Имеем некий общий модуль Core1 и интерфейсы к нему (.h, .idl ...)
Product1
common
core1
include (интерфейсы тут)
Product2
src
components
goodwork1
goodwork1 хочет интерфейсы core1
(Реальная ситуация конечно гораздо хуже. Всяких модулей штук так 100, и они друг от друга зависят в разной степени адовости)
а. Можно сослаться на интерфейсы через относительный путь ..\..\..\Product1\common\core1\include
Выглядит как бардак. Сложнее реорганизовывать core1
б. Можно выложить интерфейсы в отдельное место, оба модуля ссылаются на него
Product1
interfaces
common
core1
include
Product2
src
components
goodwork1
core1 — ..\..\interfaces
goodwork1 — ..\..\..\Product1\interfaces\include
В Product1\interfaces появляется куча интерфейсных хидеров. Похоже на бардак. TeamCity реагирует на измеенния в всей директории и перестраивает все зависимые модули, которые смотрят в Product1\interfaces, даже если интересующий их можуль не менялся.
c. Можно скопировать необходимые интерфейсы и требовать от девелоперов не вносить breaking changes
Product1
common
core1
include (свежайшие интерфейсы тут)
Product2
src
components
goodwork1
external
core1
include (скопированные интерфейсы, возможно устаревшие)
Ломающие изменения интерфейсов (а кто-нибудь, когда-нибудь обязательно их закомитит...) будут заметны только в рантайме.