Самый простой способ достичь этого - создать несколько проектов, которые компилируют одни и те же источники. У вас могут быть проекты для каждого случая, который вы хотите (DLL, Static Lib). Затем вы можете иметь несколько конфигураций для этих проектов, чтобы они могли генерировать несколько вариантов.
Проект A (DLL)
- Конфигурация "DebugStatic" - Отладка, Статический CRT -> MYLIBDS.DLL
- Конфигурация "ReleaseStatic" - Release, Статическая CRT -> MYLIBS.DLL
- "DebugDynamic" - Отладка, DLL CRT -> MYLIBD.DLL
- "ReleaseDynamic" - релиз, DLL CRT -> MYLIB.DLL
Проект B (LIB)
- Конфигурация "DebugStatic" - Debug, Static CRT -> MYLIBDS.LIB
- Конфигурация "ReleaseStatic" - Release, Статическая ЭЛТ -> MYLIBS.LIB
- "DebugDynamic" - Debug, DLL CRT -> MYLIBD.LIB
- "ReleaseDynamic" - Release, DLL CRT -> MYLIB.LIB
Вы можете использовать один и тот же подход для генерации отдельных двоичных файлов для Ansi против Unicode, x86 против x64, однопоточных или многопоточных и т. Д. Каждый проект включает в себя один и тот же набор исходных файлов с условно кодированными блоками кода по мере необходимости. Затем вы можете добавить что-то подобное в заголовочный файл, связанный с библиотекой, чтобы упростить компоновку в соответствующей версии:
#ifdef _DEBUG
#ifdef _DLL
#pragma comment(lib, "MYLIBD.LIB")
#else
#pragma comment(lib, "MYLIBDS.LIB")
#endif
#else
#ifdef _DLL
#pragma comment(lib, "MYLIB.LIB")
#else
#pragma comment(lib, "MYLIBS.LIB")
#endif
#endif