C++ makefile

Programovacie jazyky, rady, poradňa...
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

C++ makefile

Príspevok od používateľa marek788 »

Ahojte, robim smestralku do skoly, a podmienkou je vytvorit si vlastny makefile. No nikdy nas to neucili, a fakt netusim ako na to. Mam v podstate 4 hlavickove + 4 cpp + 1 main. Viete mi niekto poradit, ako na to? Je to zlozite? Dakujem vopred.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ makefile

Príspevok od používateľa BX »

https://www.google.com/webhp?sourceid=c ... 20tutorial

napr hneď tu to máš celkom pekne http://mrbook.org/tutorials/make/
Naštuduj si to a keď ti niečo konkrétne nebude jasné, napíš znovu.
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: C++ makefile

Príspevok od používateľa marek788 »

Diky za odpoved, nieco som vytvoril, vyzera, ze to funguje, myslis, ze je to v pohode?

Kód: Vybrať všetko

FLAGS=-Wall -pedantic -Wno-long-long -O0 -ggdb

all: art

art: main.o load.o save.o canvas.o ascii.o
	g++ main.o load.o save.o canvas.o ascii.o -o art

main.o: main.cpp
	g++ $(FLAGS) main.cpp

load.o: load.cpp
	g++ $(FLAGS) load.cpp

save.o: save.cpp
	g++ $(FLAGS) save.cpp

canvas.o: canvas.cpp
	g++ $(FLAGS) canvas.cpp

ascii.o: ascii.o
	g++ $(FLAGS) ascii.cpp

clean:
	rm -rf *o art
//autoeditácia príspevku (03 Jún 2014, 12:32)
Mimochodom vypisalo mi tam nejake chyby, ktore mam zrejme v kode, a nakoniec tieto dva riadky, co to je?

Kód: Vybrať všetko

collect2: error: ld returned 1 exit status
make: *** [main.o] Error 1
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ makefile

Príspevok od používateľa BX »

V tovrbe jednotlivých object fajlov ti chýba prepínač -c, ktorý práve zaistí, že sa to skompiluje do object fajlu. Takto ti to zrobí 5 spustiteľných súborov a potom linker potrebné .o súbory nikde nenájde (ld je linker, takže je to chyba linkera).
Môžeš pridať aj prepínač -o a definovať názov object fajlu sám, pre 100% istotu.

Tiež by som ešte do závislostí pridal aj hlavičkové súbory, nech sa ti to prekompiluje aj v prípade, že zmeníš nejaký header.
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: C++ makefile

Príspevok od používateľa marek788 »

super, s tym -c to uz funguje, dik. Tie hlavickove subory myslis takto?

Kód: Vybrať všetko

canvas.o: canvas.hpp canvas.cpp
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ makefile

Príspevok od používateľa BX »

Áno
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: C++ makefile

Príspevok od používateľa marek788 »

ok dakujem este raz velmi pekne :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ makefile

Príspevok od používateľa BX »

Za málo :)
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: C++ makefile

Príspevok od používateľa marek788 »

Ale mam tu este problem nejak to nefunguje

Kód: Vybrať všetko

make: Nothing to be done for `all'.
nic ine som nemenil, len pridal tie hlavickove subory, netreba ich dopisat este niekde inde?


\\edit: prikaz make clean to vyriesil.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ makefile

Príspevok od používateľa BX »

Tá veta "make: Nothing to be done for `all'." je správne. Makefile je na to, aby si nemusel furt kompilovať to isté. Ak spustíš make prvý raz, skompiluje sa všetko. Potom už sa kompiluje len ten súbor, v ktorom niečo zmeníš.
Skús dať make, potom znovu (zobrazí sa noting to be done) a potom upraviť nejaký súbor a znovu make. Ak ti to funguje správne, mal by sa skompiliť len ten jeden súbor a znovu zlinkovať.
Napísať odpoveď