Come consegnare binari e fonte a clienti e sviluppatori, se entrambi sono uguali?

0

Attualmente sto lavorando a un progetto in cui sono l'unico sviluppatore, ma dovrebbe essere consegnato presto ai "clienti". Poiché questa è in realtà un'applicazione composta da più librerie per i laboratori dei fisici, i confini tra sviluppatori e clienti sfocano o scompaiono - i miei colleghi nei laboratori hanno familiarità con C ++, un IDE (di solito Visual Studio) e git e devono essere in grado di fare modifiche ad almeno parti del progetto.

Il progetto stesso contiene attualmente un'applicazione e un mucchio di librerie. Alcune librerie richiedono determinati componenti hardware installati e non verranno compilati senza di essi, tuttavia il progetto principale (vale a dire l'applicazione e la maggior parte delle altre librerie) sono indipendenti. La vecchia soluzione è un singolo progetto di Visual Studio in un git, in cui alcune definizioni del preprocessore includono o escludono parti del codice e chi controlla il git, deve assicurarsi di adattare tali definizioni al suo hardware (brutto ....).

Il mio obiettivo è quello di dividere il singolo progetto in più destinazioni che si compilano più o meno indipendenti e se un singolo obiettivo non riesce a compilare non ha effetto sugli altri target (librerie) in modo che possano ancora essere utilizzati. L'applicazione è indipendente dalla maggior parte delle librerie, quindi non è un problema. Sto anche usando CMake per essere indipendente dalla piattaforma / compilatore e per generare un programma di installazione per i binari precompilati.

Mi piacerebbe avere un programma di installazione che consenta loro di installare le librerie e le intestazioni in pochi clic. E se scelgono, installano anche il codice sorgente e il repository git, in modo che possano cambiare il codice secondo necessità, compilarlo, testarlo "in posizione" (quindi ad esempio non due installazioni diverse, una per l'utilizzo una per lo sviluppo) e essere in grado di inviare le modifiche al repository principale (o repository, ad esempio uno per ogni libreria, ma non è necessario).

Un ulteriore problema potrebbe essere che nessuno qui è davvero un programmatore professionista. Quindi, mentre c'è sempre qualcuno in giro con competenze decenti per mantenere un sistema di repository / build più piccolo e sono sicuro di poter insegnare alle persone come usare, ad es. CMake, almeno l'installer binario deve essere utilizzabile da persone senza alcuna competenza di programmazione.

TL; DR

Come posso distribuire facilmente binari precompilati con un'opzione aggiuntiva per "installare", modificare e ricompilare l'origine, inclusa un'opzione per inviare le modifiche al git principale?

    
posta Anedar 04.04.2017 - 09:46
fonte

2 risposte

1

Credo che sia più una questione di educazione del cliente che di consegna di alcuni file binari di "installazione".

Suggerirei di documentare con molta attenzione e bene la procedura di costruzione.

(BTW, non ti consiglio di usare Cmake, ti suggerirei invece di fare GNU make e scrivere un buon Makefile per esso, con istruzioni dettagliate su come modificare quel Makefile , altrimenti rimani a Cmake ma scrivi una documentazione dettagliata su come usarlo).

Potresti scrivere qualcosa per Windows, MacOSX, Linux. In alcuni domini scientifici avrai utenti di tutti loro.

I dettagli sono ovviamente specifici del sistema operativo. Se ritieni che tutti i tuoi utenti utilizzino solo Windows e Visual Studio, devi concentrare la risposta per loro.

    
risposta data 04.04.2017 - 10:09
fonte
1

Consentitemi di suggerire una "risposta" specifica per la vostra comunità di utenti, in base alla mia esperienza con quella comunità simile ...

... quando ero uno studente laureato in fisica al CCNY (a > lungo tempo fa), circa una mezza dozzina di docenti aveva laboratori con piccoli computer PDP-lab8e che raccoglievano continuamente dati da apparati sperimentali non presidiati. I PDP-8 erano tutti collegati da remoto (tramite rs232) al PDP-10 del dipartimento, e ho scritto programmi di linguaggio assembly (uno per gli 8, uno per il 10) per interrogare ciascuno degli 8 e raccogliere i loro dati.

Ciò ha richiesto un po 'di ottimizzazione del sito / laboratorio specifico, e ho cercato di progettare e scrivere un programma generico per gli 8, con ogni laboratorio che faceva i propri tweaking, così avrei potuto dedicare meno tempo alla programmazione e più tempo studiando. Risultò di non essere la migliore idea: (a) non volevano fare alcuna programmazione in primo luogo, e (b) provare a spiegare le cose necessarie e poi eseguire il debug del loro lavoro richiese più tempo che farlo me stessa. Quindi alla fine ho abbandonato quell'idea originale e ho fatto tutto da solo.

Quindi, sebbene il tuo approccio rifletta un tentativo di pensare e progettare in modo appropriato, potresti voler fare un passo indietro e riflettere innanzitutto su quanto tempo e impegno è probabile che la tua comunità sia disposta a investire. Certo, oggigiorno le persone hanno più familiarità con i concetti di programmazione, anche se (le tue parole) "nessuno qui è un programmatore professionista". Ma potresti ancora combattere una battaglia in salita, nel qual caso gestire il caso da solo potrebbe essere il migliore. Ehi, certo, non vuoi finire con l'inimicarsi di qualcuno che potrebbe finire nel tuo comitato di tesi! :)

Quindi questa non è una risposta completamente orientata al "software engineering" (come per questo titolo del forum), ma la tua situazione particolare potrebbe richiedere un ambito più ampio.

    
risposta data 05.04.2017 - 05:59
fonte

Leggi altre domande sui tag