Organiser C/C ++ projekt på tværs af platformen

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad er den sædvanlige/anbefalede måde, hvordan man organiserer et bibliotek med flere platforme (Windows, Linux) C/C++?


Hvordan man navngiver funktion og leverer OS-afhængige implementeringer, organisering indeholder osv.? Venligst kun konstruktivt ideer - ingen pointers som 'Se på Linux.', ideas strongly welcome.

Bedste reference


Jeg bruger mapper til at sætte de afhængige overskrifter/kildefiler som dette eksempel viser


fs/filesystem.hpp < - hoved generisk overskrift, det er hvad du medtager i ethvert projekt, og du kan oprette en #defineret derinde for at sikre, at en person kun indeholder denne, og hvis de indeholder en under en nedenfor, vil den give en kompileringsfejl, der peger på denne fil som den, der skal medtages.


fs/linux/filesystem.hpp < - - header for linux #included med #ifdef LINUX i hovedfilen ovenfor


fs/windows/filesystem.hpp < - - header for windows #included med #ifdef WINDOWS i hovedfilen ovenfor


fs/linux/filesystem.cpp < - implementering til linux


fs/windows/filesystem.cpp < - implementering til Windows


Så i mit build system er det nemt at bruge '$ target' for at inkludere de relevante kildefiler pr os for bygningen.


Tricket er at oprette en grænseflade, som du kan skrive og skjule fra brugeren, så de kun ser dette og ikke implementeringsdetaljerne


Jeg hader personligt kildefiler, der er fyldt med flere OS #ifdefs i klassens definitioner, typer, overskrifter osv., Og jeg foretrækker at fragmentere alt for tydelighedens skyld og let læsning.

Andre referencer 1


Meget afhænger af, det afhænger af det byggesystem du bruger. Mange tværplatformsbyggesystemer har deres egen måde at organisere ting på.


Med hensyn til selve koden er det ikke ualmindeligt at give et overskrift, men link til implementeringsfilen for et givet system, så du kan have:


system.h
system\_linux.cpp
system\_windows.cpp
system\_osx.cpp
...


... til indsamling af OS afhængige ting.


Men alt i alt er den bedste måde at faktisk se på nogle (mindre end Linux) multi-platform projekter: P.

Andre referencer 2


CMake er et godt meta-buildsystem til mange platforme.
Boost arbejder på de fleste platforme.
Qt er også meget flot.


Prøv at holde antallet af afhængigheder lavt.


CMake lad os stille spørgsmål om platformen på en noget platformsafhængig måde.
Boost og Qt abstrakt væk platformen, så du behøver ikke at pleje (så meget).

Andre referencer 3


Tilgangen jeg bruger er at pakke alle OS-specifikke funktioner ind i min egen grænseflade. Så implementerer jeg denne grænseflade til hvert andet operativsystem (hovedsageligt Windows og Linux).


På kompileringstid bruger jeg præprocessor til at kontrollere, hvilken platform den er, og derefter medtage den relevante version.


Jeg gør det meget med tråde, disk I/O og ure/tid.


For eksempel:


#ifdef \_WIN32

#include <windows.h>
#include "windows\_code.h"

#elif \_\_linux

#include <unistd.h>
#include <pthread.h>
#include "linux\_code.h"

#else
#error "Unrecognized Platform"
#endif