Domanda

Ho un progetto C molto ampio con molti file e intestazioni C separati e molte dozzine di collaboratori. Molti contributori non hanno una forte conoscenza di makefile e dipendenze, risultando nel non raro problema in cui è quasi sempre necessario & Quot; make clean & Quot; prima di poterti fidare di " make " avere prodotto un output corretto.

Se make richiedesse minuti, questo non sarebbe un problema, ma ora sono quasi 2 ore su una macchina veloce e le persone stanno iniziando a controllare il codice che funziona quando fanno, ma non puliscono prima e il loro il codice alla fine rompe la build. Non chiederti perché questi non vengono catturati dal gestore della build prima che venga tagliata una nuova baseline ...

Sì, non avremmo dovuto lasciarlo andare così lontano.

Sì, stiamo educando i nostri sviluppatori.

Come al solito, non abbiamo tempo di fermare tutto e ripararlo a mano.

Sto pensando che ci siano strumenti in questo senso:

  • Esistono strumenti automatizzati per aiutare a costruire informazioni corrette sulla dipendenza per un progetto esistente dai file C e H?
  • Esistono strumenti automatizzati per descrivere le informazioni sulla dipendenza in base ai makefile?
  • Esiste un santo graal di uno strumento per descrivere le differenze tra i due alberi di dipendenza sopra indicati?

Ma cos'altro può / dovrebbe essere fatto per risolvere questo problema?

Grazie in anticipo ...

-Adam

È stato utile?

Soluzione

Potrebbe essere più semplice passare da Make a uno strumento che rileva automaticamente le dipendenze. Ad esempio, SCons non ti fa elencare le dipendenze ma analizza automaticamente i file che vengono compilati e cerca include . Devi semplicemente specificare quali file devono essere compilati e quali file vanno in quali file eseguibili. Il passaggio da un sistema di build all'altro sarà più semplice per il fatto che i tuoi sviluppatori non sono davvero esperti.

Un'altra alternativa se si utilizza Make è utilizzare l'opzione gcc -M per rilevare automaticamente le dipendenze. La risposta alla Rilevamento automatico delle dipendenze C ha un esempio di come scoprire automaticamente i tuoi makefile dipendenze in modo da non doverle specificare a mano.

Altri suggerimenti

Abbiamo lo stesso problema sul mio posto di lavoro. Il Trunk era sempre rotto dopo fusioni o check-in.

Abbiamo installato una integrazione continua che esegue una pulizia in circa 45 minuti rispetto a circa 2 ore su una macchina di sviluppo. Il server di integrazione esegue il polling del repository SVN ogni 2 ore per i nuovi check-in e avvia un clean clean.

In questo modo, possiamo monitorare esattamente quando la build è stata interrotta e risolverla immediatamente. Usiamo Hudson come nostro server di integrazione continua, è gratuito e open source, è un'opera d'arte e molto facile impostare. Inoltre l'interfaccia utente è molto intuitiva, tutti gli altri sviluppatori lo adorano.

Saluti,

Il modo canonico di risolvere questo problema è consentire al compilatore di generare automaticamente informazioni sulla dipendenza per te. Qualcosa del genere (supponendo gcc, ti consigliamo di controllare il tuo compilatore per opzioni simili)

SOURCES=foo.c bar.c

%.d: %.c
    $(CC) $(CFLAGS) -MM $< >$@ 

include $(SOURCES:.c=.d)

Il manuale di GNU Make ha un capitolo su generazione automatica dei prerequisiti .

EDIT: di solito consiglio alle persone di iniziare a utilizzare CMake quando hanno questo tipo di problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top