С++ (и C, хотя это имеет значение меньше), стандарт утверждает, что все единицы перевода в программе должны иметь одно и то же определение; и это включает такие вещи, как коммутаторы компилятора. Например, на MSVС++ необходимо привязать к правильной версии библиотеки времени выполнения C (/MT
versus /MD
versus /MTd
versus /MDd
) во всех единицах перевода.
Однако есть несколько зависимостей сторонних разработчиков, которые мы хотели бы использовать, и есть несколько вещей:
- Все они используют разные системы сборки (там есть autoconf, есть cmake, и есть тот, который, кажется, имеет свою собственную ручную вещь).
- В системах сборки не все выставляются такие типы коммутаторов в их конфигурации, а те, которые жестко закодированы, устанавливаются по-разному в разных системах. (Например, одна библиотека заставляет
/MD
и/MDd
, а другая -/MT
и/MTd
)
Мы не уверены, что лучший способ справиться с такими вещами. Мы обсудили следующие варианты:
- Постройте нашу собственную систему сборки независимо от сторонних зависимостей.
- PRO: Мы знаем, что все будет соответствовать
- PRO: Мы знаем, что мы можем сделать кросс-платформенную поддержку правильным способом.
- CON: Мы не знаем точно, как работают каждая из сторонних систем сборки.
- CON: Много и много работы
- CON: прерывается, если изменяется зависимость третьей стороны.
- Попробуйте использовать сторонние системы сборки и попытайтесь изменить их, чтобы делать то, что нам нужно.
- PRO: Кажется, меньше работы.
- CON: Мы можем сломать стороннюю систему.
- CON: прерывается, если изменяется зависимость третьей стороны.
- CON: Заставляет нашу собственную сборку быть действительно сложной.
Мы не знаем, что делать; и мы не можем поверить, что мы одни в таких вопросах. Должны ли мы сделать один из этих вариантов выше или какую-то третью альтернативу, о которой я не думал?