Il codice sorgente, i file di automake e di configurazione per più SO coesistono in un ramo Git

0

Sto lavorando a un progetto open source che dovrebbe essere compilato per più sistemi operativi, inclusi Ubuntu e Windows.

Sto lavorando su come strutturare i repository e le filiali Git per questo progetto.

La mia domanda è: lo stesso codice con diversi file di configurazione può coesistere in un ramo Git? o dovrebbe esserci un ramo separato per ogni sistema operativo a causa dei file generati automaticamente da autogen, configure e make.

Qual è la pratica del settore per i progetti C ++ che sono agnostici del sistema operativo.

    
posta picolo 07.07.2018 - 22:44
fonte

1 risposta

1

Ti suggerisco di esaminare il sistema di generazione per le librerie esistenti come Boost o il mio Stroika .

Queste sono due librerie open source con strutture di branch relativamente semplici (in git). Sono entrambi cross-platform.

In entrambi i casi, non vi è alcuna connessione tra la ramificazione e le piattaforme. In generale, si vorrà utilizzare una gerarchia di directory con il codice sorgente in modo che sia organizzata logicamente. E se hai del codice specifico per piattaforma, spesso le librerie lo segregano in una cartella specifica della piattaforma (ad esempio Library/Sources/Stroika/Foundation/Execution/Platform/POSIX contro Library/Sources/Stroika/Foundation/Execution/Platform/Windows )

Un tempo in cui si desidera utilizzare la ramificazione in un modo correlato alla piattaforma, è se si desidera aggiungere codice sperimentale per supportare una nuova piattaforma e non si vuole che interferisca con altri lavori. Ma una volta che la nuova "funzionalità" / piattaforma funziona, generalmente viene integrata nel ramo principale.

Cosa fa Stroika per il problema che stai dicendo - su automake - è che il suo sistema di compilazione (makefile) crea una cartella chiamata "Configurazioni" che contiene essenzialmente l'input per il processo di automake. Quindi i makefile di build creano cartelle IntermediateFiles/{CONFIGNAME} per ogni configurazione e Builds/{CONFIGNAME} per ogni configurazione. Questo non è archiviato (quindi non ha nulla a che fare con il controllo del codice sorgente). Sono solo artefatti che fanno parte del processo di creazione.

    
risposta data 18.07.2018 - 21:58
fonte

Leggi altre domande sui tag