Sto lavorando su un set relativamente grande di librerie di codice C in codice seriale, che saranno quindi parallelizzate in CUDA dai miei collaboratori.Come posso rendere facile la compilazione del mio progetto altamente modulare per gli utenti finali?
Per questo progetto il mio codice si riduce essenzialmente a
#include "Initialize.cpp"
#include "PerformMoves.cpp"
#include "CollectResults.cpp"
main()
{
//DECLARE General Vars
Initialize();
for (unsigned int step=0; step < maxStep; step++)
{
PerformMoves();
}
CollectResults();
}
Ora i passi che ho eseguire all'interno di inizializzazione e PerformMoves saranno molto diverse a seconda del tipo di simulazione che sto costruendo. La velocità è della massima performance in quanto il mio codice è una simulazione Monte Carlo che eseguirà milioni di mosse, ognuna delle quali comporta potenzialmente migliaia di calcoli. Quindi voglio evitare qualsiasi condizionale non necessario.
Quindi essenzialmente voglio diversi moduli C "plug and play", ad es.
InitializeSimType1.cpp InitializeSimType2.cpp InitializeSimType3.cpp
PerformMovesType1.cpp PerformMovesType2.cpp PerformMovesType3.cpp
....
Ogni ottimizzato per una un certo tipo di procedura di simulazione, senza il "fluff" di grandi condizionali per gestire una varietà di cas es.
Attualmente ho due diversi tipi di simulazioni, e solo questi in due cartelle diverse e compilare come segue:
g ++ Main.cc Initialize.cpp PerformMoves.cpp CollectResults.cpp -o MC_Prog
Mi piacerebbe passare a una sorta di schema di compilazione condizionale, dove ho un file di configurazione di ordinamento in cui specifico le opzioni e afferra i file cpp corretti e li compila.
Suppongo che un file makefile + config sia la mia migliore scommessa, ma al di là degli obiettivi di base e una compilazione molto lineare sono abbastanza alle prime armi nel mondo dei makefile complessi.
Quali sono alcuni buoni modi in cui è possibile creare un sistema di compilazione basato su elenchi, che consentirebbe agli utenti con conoscenze C di base di costruire facilmente un obiettivo con i moduli desiderati. I miei utenti finali non avranno una grande quantità di conoscenza dei makefile (o conoscenze di programmazione in generale), quindi un sistema complesso sul loro fine è fuori questione. Voglio che abbiano fondamentalmente un sistema trasparente basato su file di configurazione che consenta loro di scegliere un modulo Initialize, un modulo PerformMoves e un modulo CollectResults. Una volta che hanno modificato questo file di configurazione con i loro plettri, voglio che siano in grado di eseguire una compilazione a comando singolo.
In altre parole che vogliono essere in grado di creare un file README che indirizza gli utenti:
- ingresso queste voci in questo file di configurazione (dà il nome file di configurazione, le opzioni per mettere per ogni voce del file di configurazione). ..
- Compile con questo comando (dà singolo comando)
So che questa è una domanda piuttosto astratto e complesso, ma so che ci sono alcuni esperti/c Makefile là fuori che mi potesse offrire qualche buona guida.
Bene per uno che non dovresti usare così tante capitali nelle tue istruzioni. – Hello71
Nel mio codice reale seguo la convenzione di denominazione MSDN suggerita da Microsoft, che è (l'ultima volta che ho controllato) per limitare la prima lettera di tutte le parole all'interno di vars. Il codice di cui sopra ho appena sfruttato molto rapidamente per dare un'idea approssimativa di ciò che stavo cercando di fare. Capisco che ci sono molte idee diverse sull'involucro variabile, ma ho pensato che MSFT fosse un'autentica autorità, quindi segui i loro suggerimenti. È una cattiva idea? –
Sembra sempre meglio utilizzare i trattini bassi per la modifica e il dinking con il codice. La SM è, dopo tutto, la società che ha inventato la notazione ungherese. –