Sida 1 av 1

Nybörjarfråga om Makefile

Postat: 11 jul 2008, 19:50
av Johnny Rosenberg
Det går lite (väldigt lite, men bättre än inget) framåt i programmerandet och nu har jag tänkt börja använda make vid kompileringen. Hittade en sida på svenska som förklarar lite enkelt ungefär hur det hela kan gå till. Hittade dock ett och annat litet fel där, men jag tror jag fick ordning på det mesta till slut.

På sidan hittar man följande exempel:

Kod: Markera allt

CFILES = main.c work.c									# Här definierar vi upp variabler 
HFILES = work.h											# som innehåller de filer som 
OFILES = main.o work.o									# ingår i programmet.

CC = cc				# Genom att lägga namnet på c-kompilatorn i en
						# variabel kan man lätt byta kompilator.
CCFLAGS = -O			# Anger vilka flaggor som skall skickas
							# till kompilatorn
# Make har inbyggda suffixregler för bl a c-filer.
prog :	$(OFILES)
	$(CC) $(CCFLAGS) -o prog $(OFILES)

main.o: main.c work.h
work.o: work.c work.h

clean:	rm $(OFILES)

printfiles: $(CFILES) $(HFILES)
	print $?
 	touch printfiles
Då jag redan hade ett litet nybörjarprogram på tre filer tänkte jag att det kunde vara lämpligt att testa på dessa och min Makefile ser därför ut så här (efter ändringar för anpassning till mina filnamn samt efter att ha lagt till någon rad som saknades i originalet, men som jag tror måste vara med):

Kod: Markera allt

CXXFILES = file1.c++ file2.c++
HFILES = coordin.h
OFILES = file1.o file2.o

.SUFFIXES:	.o .c++
.c++.o:
			g++ -c $*.c++

CXX = g++
CXXFLAGS = -O

RectToPolar:	$(OFILES)
		$(CXX) $(CXXFLAGS) -o RectToPolar $(OFILES)

file1.o:	file1.c++ coordin.h
file2.o:	file2.c++ coordin.h

clean:
		rm $(OFILES) *~

printfiles:	$(CXXFILES) $(HFILES)
		print $?
		touch printfiles
Kan förresten säga att jag försökte få texten att tabba rätt så att man får snygga marginaler och så, men det här forumet är tydligen helt felgjort vad gäller tabbar. Det verkar som om tabbstoppen är slumpvis utvalda och olika på alla rader dessutom, så trots mycket nerlagd tid fick jag det inte att se ut som i min texteditor (Emacs). Tycker nog det gamla forumet var klart bättre på det mesta, om än inte på allt, men nu snackar vi ju Makefile här, så skit i det nu.

Var var jag nu? Jo, min Makefile fungerar allt som den ska när jag kompilerar; programmet kompileras som det ska och det hela fungerar perfekt i alla sin simpelhet.
Dock fungerar inte de sista raderna, de om printfiles. Jag får följande felmeddelande när jag kör make printfiles i en terminal (givetvis står jag i rätt mapp och så vidare):

Kod: Markera allt

Error: no "print" mailcap rules found for type "text/x-c++src"
make: *** [printfiles] Fel 3
Då jag, som sagt, redan hittat några fel på sidan, antar jag att något ytterligare saknas för att just denna lilla ”finess” ska fungera. Sidan är ju dessutom skriven på halvdålig svenska (exempelvis ”beror på” istället för ”beror av” eller ”är beroende av”), så man blir ju lite allmänt skeptisk och funderar på om även annat än själva språket kanske är lika halvdåligt…

Någon som ser något uppenbart fel? Jag är ju nybörjare så jag skulle nog inte se felet om det så bländade mig…

Re: Nybörjarfråga om Makefile

Postat: 11 jul 2008, 20:43
av gusnan
Vad ska printfiles göra? Jag gissar mig till att du vill att printfiles ska skriva ut dom filer som du har definierat som c++/header-filer i din makefil - men det är bara en gissning. Dock, när jag skriver exempelvis "print valfri_fil.txt" i en terminal så får jag samma meddelande som du får -

Error: no "print" mailcap rules found for type "text/plain"

Så ditt fel hänger nog på raden "print $?" - testa att byta ut det till nåt annat - (Jag har dock tyvärr väldigt dålig koll på om du vill skriva ut till skrivare, men om du bara vill skriva ut dom på skärmen kan du kanske testa nåt liknande

"ls $? -la"...

Som sagt - jag är lite osäker på vad du vill få för resultat.

Re: Nybörjarfråga om Makefile

Postat: 11 jul 2008, 22:35
av Johnny Rosenberg
cowboy skrev:Vad ska printfiles göra? Jag gissar mig till att du vill att printfiles ska skriva ut dom filer som du har definierat som c++/header-filer i din makefil - men det är bara en gissning. Dock, när jag skriver exempelvis "print valfri_fil.txt" i en terminal så får jag samma meddelande som du får -

Error: no "print" mailcap rules found for type "text/plain"

Så ditt fel hänger nog på raden "print $?" - testa att byta ut det till nåt annat - (Jag har dock tyvärr väldigt dålig koll på om du vill skriva ut till skrivare, men om du bara vill skriva ut dom på skärmen kan du kanske testa nåt liknande

"ls $? -la"...

Som sagt - jag är lite osäker på vad du vill få för resultat.
Jag är också osäker på vad jag vill få för resultat. Jag har ju mer eller mindre kopierat det hela från sidan jag länkade till i mitt första inlägg och jag kan inte se att det framgår så värst mycket på den sidan om vad man vill åstadkomma. Det står bara: ”Skriver ut de filer printfiles beror på som ändrats sedan senaste utskriften”. Hm… där hade vi det där ”beror på” igen, ha ha ha…
Kanske är så att man måste ha läst fler sidor för att man ska förstå hela sammanhanget. Detta var ju tydligen 5.9 i något sammanhang. Om jag tar en titt på 5.8 så kanske det klarnar… Antagligen är printfile också något som ingår i ”projektet” på något sätt. Nåja, jag får forska mer om det, det kanske inte är så knepigt ändå, förutom att man måste översätta allt från halvkass svenska till riktig svenska för att förstå det hela fullt ut… :P