Come gli altri hanno già detto, non esiste un singolo standard per denominare i file su Windows.
Per la nostra base di prodotti completa che copre centinaia di exe, DLL e librerie statiche, abbiamo utilizzato con successo le seguenti operazioni per molti anni e ha salvato molta confusione. È fondamentalmente un mix di diversi metodi che ho visto usato nel corso degli anni.
In breve tutti i nostri file di prefisso e suffisso (esclusa l'estensione stessa). Iniziano tutti con "om" (basato sul nome della nostra azienda), e quindi hanno una combinazione di 1 o 2 caratteri che identifica approssimativamente l'area del codice.
Il suffisso spiega che tipo di file incorporato sono e include un massimo di tre lettere utilizzate in combinazione a seconda della build che include Unicode, Statico, Debug (le build di Dll sono predefinite e non hanno identificatore di suffisso esplicito). Quando abbiamo avviato questo sistema, Unicode non era così diffuso e abbiamo dovuto supportare sia build Unicode che Non-unicode (pre Windows 2000 os), ora tutto è esclusivamente costruito in Unicode ma usiamo ancora la stessa nomenclatura.
Quindi un tipico lib "set" di file potrebbe essere simile
omfThreadud.lib (Unicode/Debug/Dll)
omfThreadusd.lib (Unicode/Static/Debug)
omfThreadu.lib (Unicode/Release/Dll)
omfThreadus.lib (Unicode/static)
Tutti i file sono built-in in una cartella bin comune, che elimina un sacco di problemi di dll-hell per gli sviluppatori e rende anche è più semplice regolare le impostazioni del compilatore/linker: puntano tutte alla stessa posizione usando percorsi relativi e non c'è mai bisogno di copiare manualmente (o automaticamente) le librerie necessarie per un progetto. Avere questi suffissi elimina anche qualsiasi confusione sul tipo di file che si può avere e garantisce che non si può avere uno scenario misto in cui si mette giù la dll di debug su un kit di rilascio o viceversa. Tutti gli ex utilizzano anche un suffisso simile (Unicode/Debug) e vengono creati nella stessa cartella bin.
C'è anche una singola cartella "include", ogni libreria ha un file di intestazione nella cartella include che corrisponde al nome della libreria/dll (ad esempio omfthread.h) che il file stesso include tutti gli altri elementi che sono esposti da quella libreria. Questo è più semplice se si desidera funzionalità che è in foo.dll si #include semplicemente "foo.h"; le nostre librerie sono molto segmentate per aree di funzionalità - in effetti non abbiamo alcuna dll "swiss-army knife", quindi includendo le librerie tutta la funzionalità ha senso. (Ognuna di queste intestazioni include anche altre intestazioni prerequisite se esse sono le nostre librerie interne o altri SDK del fornitore)
Ciascuno di questi include file interni utilizza macro che utilizzano # pramga per aggiungere il nome della libreria appropriato alla riga del linker in modo che singoli progetti non è necessario preoccuparsi di questo. La maggior parte delle nostre librerie può essere compilata staticamente o come DLL e #define OM_LINK_STATIC (se definito) viene utilizzato per determinare quale progetto desidera (solitamente usiamo le DLL ma in alcuni casi le librerie statiche incorporate nel file .exe) più senso per la distribuzione o per altre ragioni)
#if defined(OM_LINK_STATIC)
#pragma comment (lib, OMLIBNAMESTATIC("OMFTHREAD"))
#else
#pragma comment (lib, OMLIBNAME("OMFTHREAD"))
#endif
Queste macro (OMLIBNAMESTATIC & OMLIBNAME) utilizzare _DEBUG determinare il tipo di costruzione che è e generare il nome della libreria corretta per aggiungere alla linea di linker.
Utilizziamo una definizione comune nelle versioni statiche & dll di una libreria per controllare l'esportazione corretta della classe/delle funzioni nelle build di dll. Ogni classe o funzione esportata dalla libreria è decorato con questa macro (il cui nome corrisponde al nome di base per la libreria, anche se questo è in gran parte poco importante)
class OMUTHREAD_DECLARE CThread : public CThreadBase
Nella versione DLL delle impostazioni del progetto definiamo OMFTHREAD_DECLARE = __ declspec (dllexport), nella versione della libreria statica della libreria definiamo OMFTHREAD_DECLARE come vuoto.
Nelle biblioteche intestazione del file lo definiamo in base a come il client sta tentando di collegare ad esso
#if defined(OM_LINK_STATIC)
#define OMFTHREAD_DECLARE
#else
#define OMFTHREAD_DECLARE __declspec(dllimport)
#endif
Un progetto tipico che vuole utilizzare una delle nostre biblioteche interne sarebbe solo aggiungere l'appropriato comprendono al loro stdafx.h (tipicamente) e funziona, se hanno bisogno di collegarsi alla versione statica aggiungono semplicemente OM_LINK_STATIC alle loro impostazioni del compilatore (o lo definiscono nello stdafx.h) e funziona di nuovo.
SCons anche "crea (questo) collisione piuttosto sgradevole" quando si usa _env.SharedLibrary_ e _env.StaticLibrary_ con lo stesso nome di destinazione. –