Denominazione file e organizzazione generale per lo sviluppo multipiattaforma

3

Sto scrivendo una libreria di socket multipiattaforma e useremo l'idioma pimpl in modo che gli utenti che includono intestazioni per la libreria non debbano preoccuparsi di problemi specifici del sistema operativo.

Quindi, ad esempio un file portable.hpp sarebbe simile a questo:

// forward declare pimpl
struct socketimpl;

class portable
{
public:

private:
    socketimpl *pimpl_;  // hide OS specific details
};

Ma come faccio a dare un nome ai file di implementazione.

Potrei avere portablewin.cpp , portablelinux.cpp ecc.

Avrei quindi cartelle specifiche per i diversi sistemi operativi supportati?

Una struttura di cartelle come questa:

/makefile
/include/
/src/unix/
/src/windows/

Quindi ci sarebbe un makefile standard che includerebbe un makefile di supporto che avrebbe i file specifici ecc. per ogni piattaforma supportata.

Quindi utilizzare un makefile specifico del sistema operativo per ogni sistema operativo?

È il miglior piano? O altre idee?

    
posta user619818 03.09.2016 - 18:17
fonte

2 risposte

3

Entrambi gli approcci funzionano. Quindi scegli quello che preferisci e poi applicalo in modo coerente.

Alcune osservazioni per aiutarti a scegliere:

  • Avrai bisogno di diversi makefile se usi differenti toolchain (ad esempio VisualStudio su windows, gcc su linux). La libreria POCO è un buon esempio per questo: Guarda il loro file readme nella sezione Building della loro pagina di download. In alternativa, puoi utilizzare un cross platform come CMake .
  • Vorresti utilizzare la compilazione condizionale per non compilare / includere intestazioni specifiche del sistema operativo. È quindi possibile compilare tutti i file e indicare nel file di origine quale parte deve essere compilata per quale sistema (controllato da una definizione di simbolo del preprocessore nel makefile). Dall'altro lato, con PIMPL sarai anche libero di selezionare il file da compilare nel makefile.
  • Dipende anche dal numero di file specifici della piattaforma:
    • Con pochissimi, potresti usare una sottodirectory platform in cui tutti i file portablewin.cpp , portablelinux.cpp
    • Con diversi file dipendenti del SO correlati, potrebbe avere senso avere una sottodirectory per os (es. boost lo usa per l'implementazione di asio ; SDL fa lo stesso).
  • Utilizzare se possibile solo nomi di file e nomi di directory in minuscolo. Ciò eviterà un certo mal di testa a causa della sensibilità del caso specifico del sistema operativo
risposta data 03.09.2016 - 19:31
fonte
1

Prendi decisioni in un unico posto.

Stai rendendo entrambi il percorso del file e il nome del file a conoscenza del sistema operativo. Questa è una decisione presa in due punti.

Fai attenzione a quanto questa decisione diventa visibile in tutto ciò che riguarda i file.

    
risposta data 03.09.2016 - 18:54
fonte

Leggi altre domande sui tag