2010-03-11 26 views
17

Come posso ottenere Eclipse per creare molti binari alla volta all'interno di un progetto (senza scrivere un Makefile a mano)?Creazione di più file binari all'interno di un progetto Eclipse

Possiedo un progetto CGI che risulta in più programmi .cgi eseguiti dal server Web, oltre a numerose librerie da essi utilizzate. Il Makefile fatto a mano usato per costruirlo lentamente diventa irrinunciabile. Usiamo "Internal Build" di Eclipse per costruire tutti gli altri progetti e preferiremmo usarlo anche qui, ma per il bene di me, non riesco a trovare come ottenere Eclipse per creare più piccoli programmi come risultato invece di collegare tutto in un binario.

+1

Si dovrebbe considerare di fare una domanda separata su come rendere il Makefile più manutenibile, nel caso in cui questo è un vicolo cieco –

+0

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. –

risposta

21

Soluzione per questo descritto qui: http://tinyguides.blogspot.ru/2013/04/multiple-binaries-in-single-eclipse-cdt.html. C'è un estratto:

  1. Creare un progetto gestito (File> ++ nuovo progetto C> Executable)
  2. Aggiungere il codice sorgente contenente multipla main() funziona
  3. Vai al progetto> Proprietà> C/C++ Generale> Percorso & Simboli> Gestisci configurazioni
  4. Creare una configurazione di build per ogni eseguibile e denominarlo in modo appropriato (è possibile clonare configurazioni esistenti come Debug e Release).
  5. Dal esploratore di progetto, fare clic destro su ogni file di origine che contiene una funzione main()> configurazioni delle risorse> escludere dalla Costruire e escludere tutti costruire configurazioni eccetto quello che costruisce l'eseguibile con questa funzione main()
  6. Tutto l'altro codice è incluso in tutte le configurazioni di generazione per impostazione predefinita. Potrebbe essere necessario modificare questo a seconda dell'applicazione.
  7. È ora possibile costruire un eseguibile per ogni funzione principale andando a Project> Crea Configurazioni> Set Active, Progetto> Crea progetto
+3

o costruisci tutti in una volta tramite 'Progetto> Crea configurazioni> Crea tutto ' –

6

L'utilizzo di Eclipse come sistema di generazione per codice di produzione sembra una cattiva idea in generale. Penso che sia un grande IDE e l'ho usato ampiamente per entrambi i progetti Java e C++, ma per un sistema di costruzione credo fermamente che Ant, make e altre utility di compilazione dedicate siano la strada da percorrere.

ci sono diverse ragioni per questo:

  • dedicati utilità di generazione offrono la flessibilità molto che stai cercando nella generazione di obiettivi multipli eseguibili.

  • Ant e supporto supportano le catene di processi di compilazione arbitrarie più concepibili (anche se non del tutto).

  • Un'apposita utility di compilazione è in grado di offrire maggiore stabilità e compatibilità con le versioni precedenti per i formati di file di descrizione build rispetto a uno strumento IDE come Eclipse. Inoltre, sono abbastanza sicuro che la funzione di build interna di Eclipse dipenda dalla descrizione del file ".project", e il formato di quest'ultimo non è probabilmente stabile come il formato di descrizione build per Ant o make.

  • d'impiego generale, le utility di creazione di base sono di solito a linea di comando-based, che lo rende facile da integrare con loro più sofisticate, di livello superiore costruire programmi di utilità per la gestione di generazione automatica come Pulse, CruiseControl, ecc

Il bisogno che sta motivando la tua domanda ti sta dicendo che è ora di passare a uno strumento di costruzione migliore.

2

C'è un modo per utilizzare 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 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 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 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;)

Problemi correlati