Avatar billede thomas_nj Nybegynder
03. juli 2004 - 23:40 Der er 6 kommentarer og
1 løsning

Ser denne makefile ud som den skal

Hejsa

  Jeg er i gang med at lære at lave makefiles til linux og har fået strikket følgende sammen ved at kigge på nogen der allerede var lavet:

CXX=g++
                                                                               
OUTPUT=hej
                                                                               
CPPSOURCE= test.cpp test2.cpp
                                                                               
                                                                               
OBJECTS=$(CPPSOURCE:.cpp=.o)
                                                                               
test.o: test.cpp
test2.o: test2.cpp
                                                                               
test: $(CPPSOURCE)
        $(CXX)  -o $(OUTPUT) $(OBJECTS)


  Meningen med den er at test.cpp bruger en funktion fra test2.cpp. Det er godt nok langt fra pænt endnu, eksempelvis er funktionen i test2.cpp deffineret i test.cpp da jeg endnu ikke har fået fundet ud af at flette .h filer ind endnu.
  Nå men egentlig har jeg 2 spørgsmål

  1: Det jeg har fået lavet virker fint men er det lavet ordentligt?
  2: Hvordan får jeg test2.h blandet ind i makefilen?
Avatar billede bertelbrander Novice
04. juli 2004 - 00:26 #1
Det ser ok ud, jeg ville dog lave en kommando for hvordan man laver en .o fil ud fra en .cpp fil, det kunne være noget i stil med:

%.o: %.cpp
    g++ -c $(CPPFLAGS) -o $@ $<

Så kan du definere dine egne flag til kompileren (CPPFLAGS).
Linierne:
test.o: test.cpp
test2.o: test2.cpp
Bliver dermed overflødige.

header filen er en "dependency" for de filer der inkluderer den, så du kan tilføje:
test.o: test2.h
test2.o: test2.h

Når du får mange .cpp filer og .h filer kan du med fordel kikke på -M (og alle dens varianter), den bruges til at få kompileren til selv at lave dependency filer.
Avatar billede bertelbrander Novice
04. juli 2004 - 01:06 #2
Efter lidt fejl rettelser, og med auto dependency generering:

CXX=g++

OUTPUT=hej.exe

CPPSOURCE= test.cpp test2.cpp

OBJECTS=$(CPPSOURCE:.cpp=.o)

CPPFLAGS=-MD -MP
$(OUTPUT): $(OBJECTS)
    $(CXX) $(OBJECTS) -o $(OUTPUT)

clean:
    @-rm *.d *.o $(OUTPUT)

%.o: %.cpp
    $(CXX) -c $(CPPFLAGS) -o $@ $<

-include $(CPPSOURCE:.cpp=.d)

På linux ville du nok ikke kalde output for .exe
Jeg har tilføjet en clean "target", så du kan skrive make clean for at få slettet alle genererede filer.
Avatar billede thomas_nj Nybegynder
04. juli 2004 - 13:15 #3
Mange tak! Det virker helt perfekt
Avatar billede thomas_nj Nybegynder
04. juli 2004 - 13:30 #4
Nu har jeg prøvet på at få lavet test2.h

Nu har jeg en makefile der ser sådanher ud:
CXX=g++
                                                                               
OUTPUT=hej.exe
                                                                               
CPPSOURCE= test.cpp test2.cpp
                                                                               
OBJECTS=$(CPPSOURCE:.cpp=.o)
test.o: test2.h
test2.o: test2.h
CPPFLAGS=-MD -MP
$(OUTPUT): $(OBJECTS)
        $(CXX) $(OBJECTS) -o $(OUTPUT)
                                                                               
clean:
        @-rm *.d *.o $(OUTPUT)
                                                                               
%.o: %.cpp
        $(CXX) -c $(CPPFLAGS) -o $@ $<
                                                                               
-include $(CPPSOURCE:.cpp=.d)

Den compiler uden problemer når jeg skriver make, der kommer bare ikke noget output
Avatar billede thomas_nj Nybegynder
04. juli 2004 - 13:33 #5
Min fejl havde ikke set at du have lavet så meget for mig
Avatar billede thomas_nj Nybegynder
04. juli 2004 - 15:25 #6
Og du undgår vel point som sædvanligt?
Avatar billede bertelbrander Novice
04. juli 2004 - 17:29 #7
Ja.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester