Как уже сообщалось, нет единственного стандарта для именования файлов в окнах.
Для нашей полной базы продуктов, которая охватывает 100-е из exes, dlls и static libs, мы успешно использовали это в течение многих лет, и это сэкономило много путаницы. В основном это сочетание нескольких методов, которые я видел на протяжении многих лет.
Вкратце все наши файлы как префикса, так и суффикса (не включая само расширение). Все они начинаются с «om» (на основе названия нашей компании), а затем имеют комбинацию из 1 или 2 символов, которая примерно определяет область кода.
Суффикс объясняет, какой тип встроенного файла они содержат и включает до трех букв, используемых в комбинации, в зависимости от сборки, которая включает в себя Unicode, Static, Debug (сборки Dll по умолчанию и не имеют явного идентификатора суффикса). Когда мы запустили эту систему, Unicode не был настолько распространен, и нам пришлось поддерживать как Unicode, так и Unicode-сборки (до Windows 2000 os), теперь все исключительно построено в Юникоде, но мы по-прежнему используем одну и ту же номенклатуру.
Так типичный .lib «набор» файлов может выглядеть
omfThreadud.lib (Unicode/Debug/Dll)
omfThreadusd.lib (Unicode/Static/Debug)
omfThreadu.lib (Unicode/Release/Dll)
omfThreadus.lib (Unicode/static)
Все файлы встроенной в общую папку BIN, которая устраняет много проблем длл-ад для разработчиков, а также делает упростить настройку параметров компилятора/компоновщика - все они указывают на одно и то же местоположение с использованием относительных путей, и никогда не требуется ручное (или автоматическое) копирование библиотек, необходимых для проекта. Наличие этих суффиксов также устраняет любую путаницу в отношении того, какой тип файла у вас может быть, и гарантирует, что у вас не может быть смешанного сценария, в котором вы удаляете отладочную DLL в наборе релизов или наоборот. Все exes также используют аналогичный суффикс (Unicode/Debug) и встраиваются в ту же папку bin.
Существует также одна отдельная папка «включить», каждая библиотека имеет один заголовочный файл в папке include, которая соответствует имени библиотеки/dll (например, omfthread.h). Этот файл сам включает в себя все другие элементы, которые выставлены этой библиотекой. Это упрощает работу, если вы хотите функциональность, находящуюся в foo.dll, вы просто #include "foo.h"; наши библиотеки сильно сегментированы по функциональным возможностям - фактически у нас нет никаких DLL «швейцарских армейских ножей», так что в целом функциональность библиотек имеет смысл. (Каждый из этих заголовков также включает в себя другие предварительные заголовки, будь то наши внутренние библиотеки или другие SDK поставщиков).
Каждый из этих файлов включает внутренние макросы, которые используют # pramga для добавления соответствующего имени библиотеки в линию компоновщика, поэтому отдельные проекты не нужно беспокоиться об этом. Большинство наших библиотек могут быть построены статически или как DLL, а #define OM_LINK_STATIC (если определено) используется для определения того, что хочет сделать отдельный проект (обычно мы используем библиотеки DLL, но в некоторых случаях встроенные в него файлы .exe make больше смысла для развертывания или по другим причинам)
#if defined(OM_LINK_STATIC)
#pragma comment (lib, OMLIBNAMESTATIC("OMFTHREAD"))
#else
#pragma comment (lib, OMLIBNAME("OMFTHREAD"))
#endif
Этих макросов (OMLIBNAMESTATIC & OMLIBNAME) использует _DEBUG определить, какой тип телосложения это и генерировать правильное имя библиотеки, чтобы добавить к строке компоновщика.
Мы используем общее определение в статических & DLL-версиях библиотеки для управления надлежащим экспортом класса/функций в сборках dll. Каждый класс или функция экспортируется из библиотеки украшена этот макрос (имя которого совпадает с именем базы для библиотеки, хотя это в значительной степени неважная)
class OMUTHREAD_DECLARE CThread : public CThreadBase
В версии DLL настроек проекта мы определяем OMFTHREAD_DECLARE = __ declspec (dllexport), в статической библиотечной версии библиотеки мы определяем OMFTHREAD_DECLARE как пустой.
В библиотеках заголовка файла мы определим его на основе того, как клиент пытается связать с ней
#if defined(OM_LINK_STATIC)
#define OMFTHREAD_DECLARE
#else
#define OMFTHREAD_DECLARE __declspec(dllimport)
#endif
Типичный проект, который хочет использовать один из наших внутренних библиотек просто добавить соответствующий включать в свои stdafx.h (обычно), и он просто работает, если им нужно связать статическую версию, они просто добавляют OM_LINK_STATIC в свои настройки компилятора (или определяют его в stdafx.h), и он снова работает.
SCons также «создает (это) довольно неприятное столкновение» при использовании _env.SharedLibrary_ и _env.StaticLibrary_ с тем же именем цели. –