/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Filer, mapper, namespaces, makefiles..argh
Fra : db


Dato : 12-04-04 11:38

Hey group

Jeg er ved at omskrive et lille program kaldet lockdown og skal lige
bruge lidt hjælp til strukturen af koden, samt brugen af namespaces.
Før i tiden brugte jeg ikke nested namespaces og jeg lagde samtlige
filer i een mappe. Jeg benyttet mig heller ikke rigtige af opdeling af
filer i en header .hhp og så selve koden i .cpp, så jeg brugte heller
ikke Makefile's (jeg bruger FreeBSD med gcc). Men denne gang skulle det
være og jeg har derfor nogle begynder vanskeligheder. Jeg har:
namespace lockdown;
namespace lockdown::io;
namespace lockdown::io::in;
namespace lockdown::io::out;
namespace lockdown::modifyers;
Jeg har valgt at sige at hver gang jeg har et nyt namespace, laver jeg
en mappe til de filer som det namespace har og så laver jeg filen med
definitionen på namespace'et i mappe over. Altså har jeg fx en mappe:
lockdown/io/ i denne mappe har jeg alle filer til de klasser (og andet)
der er i io namespace'et, samt to filer kalder in.hpp og out.hpp der
definere de to nested namespaces. Der er således også to mappe i
lockdown/io/ som naturligvis hedder in og out, hvor du finder filerne
til de namespaces. Lyder dette som en acceptabel måde at lave det på,
eller hvordan strukturer I det?

Næste spørgsmål er hvordan jeres fil med definitionen på
namespace'et ser ud. Jeg har valgt at skrive følgende i
#ifndef LOCKDOWN_IO_HPP
#define LOCKDOWN_IO_HPP
#include "lockdown.hpp"   //Her er lockdown::io for første gang nævnt
namespace lockdown { namespace io {
   //nested namespace hvor definitionen er i mappen lockdown/io/out.hpp
   namespace out {}
   namespace in {}
   class IOException;
   //klasse for definitionen er i lockdown/io/File.hpp
   class File;
}}

Er dette så den rigtige måde at gøre det på eller burde definitionen
på nested namespaces og klasser indgå i ovenstående fil? Fx ved at
#include definitionerne?

Sidst sørgsmål er til makefiles. Eftersom jeg har mange .cpp filer
som compiles til .o filer, skal disse jo til sidst med i den samlede
exekverbare fil, men hvordan det? Det ville være træls at skulle
skrive navnene på samtlige .o filer når man filer, så jeg har i hver
mappe lavet en makefile, fx i lockdown/io/out
CXX ?= g++
CFLAGS += -Wall

all:   Output.o
   cp Output.o ../out.o

Output.o: Output.hpp
   $(CXX) $(CFLAGS) -c Output.cpp -o $@

clean:
   rm -f *.o

I lockdown/io/Makefile har jeg så:
CXX ?= g++
CFLAGS += -Wall

all: out.o File.o
   $(CXX) $(CFLAGS) -shared File.o out.o -o ../io.o

out.o:
   make -C out all

File.o: File.hpp
   $(CXX) $(CFLAGS) -c File.cpp -o $@

clean:
   rm -f *.o
   make -C out clean

Altså beder man en mappe "make all" tager den sig af sine egne filer og
kalder "make all" til alle sine undermapper. Undermappernes Makefile's
kompiler så de filer og ligger en "undermappe".o fil i mappen over, der
indeholder hele undermappen (og dens undermapper). Så
lockdown/io/out/Makefile ligger en out.o i lockdown/io/ som
lockdown/io/Makefile bruger til at lave dens io.o fil som den ligger i
lockdown/ Lyder det fornuftigt? Jeg kan i hvert ikke få det til at
virke uden at lave shared libs hvilket jeg ikke ønsker.

Så for at opsumere. Hvordan deler i koden op fysisk i filer og mapper,
og hvordan ser jeg namespace filer ud og hvor ligger I dem, og hvordan
kompiler I sådan et stort projekt?

mvh
db

ps: Hvis I vil se koden kan jeg godt maile den til jer (bare ikke tag
den kode der ligger på lockdown.trunet.dk, den er ikke delt op som
beskrevet ovenfor).

 
 
Mogens Hansen (14-04-2004)
Kommentar
Fra : Mogens Hansen


Dato : 14-04-04 15:35

db wrote:

[8<8<8<]
> Så for at opsumere. Hvordan deler i koden op fysisk i filer og mapper,
> og hvordan ser jeg namespace filer ud og hvor ligger I dem, og hvordan
> kompiler I sådan et stort projekt?

Det er et stort spørgsmål, der ikke er til at svare kort på.
En vigtig overvejelse, der hænger sammen med den fysiske opdeling, er
hvordan hænger de forskellige dele sammen - hvem bruger hvem ?

En god (men lidt gammel på nogle områder da den er før Standard C++)
beskrivelse af en række overvejelser omkring håndtering af filer,
afhængigheder, testbarhed etc. i forbindelse med store projekter i C++
kan findes i bogen
Large Scale C++ Software Design
John Lakos
ISBN 0-201-63362-0


Venlig hilsen

Mogens Hansen


db (14-04-2004)
Kommentar
Fra : db


Dato : 14-04-04 13:46

On Wed, 14 Apr 2004 16:35:06 +0200
Mogens Hansen <mogens_h@dk-online.dk> wrote:

> Det er et stort spørgsmål, der ikke er til at svare kort på.
> En vigtig overvejelse, der hænger sammen med den fysiske opdeling, er
> hvordan hænger de forskellige dele sammen - hvem bruger hvem ?
>
> En god (men lidt gammel på nogle områder da den er før Standard C++)
> beskrivelse af en række overvejelser omkring håndtering af filer,
> afhængigheder, testbarhed etc. i forbindelse med store projekter i C++
>
> kan findes i bogen
> Large Scale C++ Software Design
> John Lakos
> ISBN 0-201-63362-0

Ok, det må jeg undersøge nærmere, takker

mvh
db

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste