Я хочу упаковать библиотеку как нативный пакет NuGet. Этот вопрос не является специфическим для способа, которым распространяются упакованные lib / dll / pdb / include; но чтобы быть конкретным, я смотрю на CoApp скрипты (Хотелось бы, чтобы было что-то лучшее, на что я мог бы ссылаться), и у меня сложилось впечатление, что существует слишком много различных целей сборки, полученных комбинаторно. Я пытаюсь придумать более или менее минимальный набор целей, который может использоваться приложениями, которые зависят от пакета. Существуют следующие в основном ортогональные оси для целей сборки:
libcmtd.lib
или же msvcdrtd.lib
) и сборки выпуска ссылаются на статическую среду выполнения (libcmtd.lib
или же msvcdrtd.lib
). Имеет смысл включить их, чтобы избежать конфликта библиотек по умолчанию.Выше, безусловно, хорошие оси. Следующий вопрос сомнителен, хотя присутствует во многих примерах:
_cdecl
против _stdcall
против __fastcall
против __thiscall
, Я думаю, что это имеет мало смысла. Соглашения о вызовах будут поддерживаться для этой конкретной библиотеки независимо от других связанных библиотек. Кроме того, переменные аргументы предназначены для _cdecl
только в Win32, а также 64-битные соглашения о вызовах иначе все равно. Я понимаю, что все, что я выберу, будет делать, пока заголовочные файлы объявляют соглашения о вызовах, совместимые с платформой. В любом случае библиотеки времени выполнения Microsoft не предоставляются для различных соглашений о вызовах.И следующий я не уверен, как справиться. Опять же, примеры объявляют
v100
(v10.0, VS 2010) до vs140
(v14.0, VS 2015). Мой главный вопрос: насколько совместимы библиотеки времени выполнения для разных библиотек Visual C ++? Проблема здесь в том, что мы используем и другие наборы инструментов (например, Intel C ++), и они обычно не имеют соответствующих случаев упаковки в CoApp, будучи совместимыми со средами выполнения Microsoft.Я хочу избежать упаковки для определенного набора инструментов. Насколько это возможно, если код компилируется с самой старой версией, а также не использует какие-либо более новые функции времени выполнения (например, v110 является самой низкой поддерживаемой версией)? Я беспокоюсь о двух основных вещах (извините, здесь начинается еще один нумерованный список):
libcmt[d].lib
)?std
исключения должны быть совместимы вверх и вниз по цепочке версий компиляторов, если я скомпилирую библиотеку с включенным RTTI? В целом, существует ли матрица совместимости во время выполнения, предоставляемая Microsoft?
И если какие-то другие пункты нумерованного списка, я бы тоже хотел это услышать.
Задача ещё не решена.