03. juli 2004 - 23:40Der 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?
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.
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.
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.