C'è un modo per utilizzare buildconfiguration s per creare una libreria binario (o in comune , nel mio caso) da ogni configurazione di costruzione. Usando la risposta sopra, questo significa escludere manualmente tutti tranne il file principale effettivo da ogni configurazione di compilazione.
Ho appena utilizzato le risposte di cui sopra per semplificare il lavoro sul mio progetto eclipse che crea 14 librerie condivise attraverso 14 configurazioni di build. Tuttavia, la configurazione del indivdual "escludere dalla costruzione" contesto era abbastanza ingombrante, quindi ho passato a utilizzando il seguente codice basandosi su un preprocessor-directive come il mio file principale completo:
/*
*main.cpp
*/
/* Within
* Project | Properties | C/C++-Build | Settings
* | GCC C++ Compiler | Preprocessor
* set the following defined Symbol:
* _FILENAME=${ConfigName}
*/
#define __QUOT2__(x) #x
#define __QUOT1__(x) __QUOT2__(x)
#include __QUOT1__(_FILENAME.cpp)
#undef __QUOT1__
#undef __QUOT2__
/* The above include directive will include the file ${CfgName}.cpp,
* wherein ${CfgName} is the name of the build configuration currently
* active in the project.
*
* When right clicking in
* Project Tree | (Project)
* and selecting
* Build Configuration | Build all
* this file will include the corresponding .cpp file named after the
* build config and thereby effectively take that file as a main file.
*
* Remember to exclude ALL ${CfgName}.cpp files from ALL build configurations.
*/
Si noti che non fa altro quindi includere un altro. file cpp il cui nome è dedotto dallo preprocessor e un simbolo impostato nelle opzioni del compilatore. Il simbolo è $ {CfgName} e verrà automaticamente sostituito dal nome di configurazione corrente da eclipse.
Uno non ha bisogno di configurare, quale file è incluso in quale build config. Escludere tutti i file $ {CfgName} .cpp in ogni build e includere main.cpp in ogni build.
PS: la risposta di hovercraft mi ha dato l'idea di avere un file principale che non contenga il codice da solo. Se uno include codice condiviso dai diversi file principali effettivi $ {CfgName} .cpp, lavorare sul loro codice può diventare impossibile perché i file header in main.cpp non saranno visibili in essi. L'ho fatto fino a ieri, ma mantenere il codice con indice rotto ecc. È stato un grande dolore.
PPS: questa procedura al momento interrompe la ricostruzione automatica del file principale se è stato modificato solo il file .cpp incluso. Sembra che eclipse non riconosca le modifiche in $ {CfgName} .cpp (che è escluso dalla compilazione). Quindi è necessaria una ricostruzione manuale dopo ogni modifica. Questo mi disturba;)
Si dovrebbe considerare di fare una domanda separata su come rendere il Makefile più manutenibile, nel caso in cui questo è un vicolo cieco –
I secondo il pensiero espresso da Zac. Perché il tuo Makefile non è mantenibile? Molti, molti progetti software grandi e complicati utilizzano i makefile con successo su codebase in rapida evoluzione. –