Модули, интерфейсы и относительные пути
От: Sergey J. A. Беларусь  
Дата: 10.10.16 14:08
Оценка:
В дополнение к вопросу про билд интересует кто как решает следующий вопрос:

Имеем некий общий модуль 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 (скопированные интерфейсы, возможно устаревшие)


Ломающие изменения интерфейсов (а кто-нибудь, когда-нибудь обязательно их закомитит...) будут заметны только в рантайме.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.