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.