Kirjoittaja Aihe: [Ratkaistu]Kuinka makefilea parannellaan/tehdään ?  (Luettu 4245 kertaa)

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Makefile on sellainen, johon en ole mielelläni koskenut. Nyt kuitenkin tein vihdoinkin jotain räpellystä siihen suuntaan.

Tyyliltään se on aika moinen räpellys, joten kysympä teiltä, kuinka sen saisi siistimmäksi/pienemmäksi ?

Liitteenä käännös scripti bash-scriptinä ja kooditageissa sen pohjalta tehty makefile-räpellykseni...
Koodia: [Valitse]
CPP = g++

LDFLAGS = -lm
CXXFLAGS = -g

lodepng.o: #library/lonepng.cpp
$(CPP) -c library/lodepng.cpp -g -o lodepng.o

PNGimageClass.o: lodepng.o
$(CPP) -llodepng.o -c source/PNGimageClass.cpp -o PNGimageClass.o


TestPNGimageClass: lodepng.o PNGimageClass.o
$(CPP) lodepng.o PNGimageClass.o source/TestPNGimageClass.cpp -o TestPNGimageClass -I.

TestPNGimageClassCopyImg: lodepng.o PNGimageClass.o
$(CPP) lodepng.o PNGimageClass.o source/TestPNGimageClassCopyImg.cpp -o TestPNGimageClassCopyImg -I.

TestPNGimageClassCropTest: lodepng.o PNGimageClass.o
$(CPP) lodepng.o PNGimageClass.o source/TestPNGimageClassCropTest.cpp -o TestPNGimageClassCropTest -I.

PNSClass.o:
$(CPP) source/PNSClass.cpp -c -o PNSClass.o

YlebmpClass.o: PNGimageClass.o lodepng.o
$(CPP) -lPNGimageClass.o -llodepng.o source/YlebmpClass.cpp -c -o YlebmpClass.o -I.

TestYLEImageClassCopyImg: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o
$(CPP) lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o source/TestYLEImageClassCopyImg.cpp -o TestYLEImageClassCopyImg -I.

YlerowClass.o: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o
$(CPP) -c -llodepng.o -lPNGimageClass.o -lYlebmpClass.o -lPNSClass.o source/YlerowClass.cpp -o YlerowClass.o

YlePageClass.o: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o
$(CPP) -c -llodepng.o -lPNGimageClass.o -lYlebmpClass.o -lYlerowClass.o -lPNSClass.o source/YlePageClass.cpp -o YlePageClass.o

TestYLEpageClassImg: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o YlePageClass.o
$(CPP) lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o YlePageClass.o source/TestYLEpageClassImg.cpp -o TestYLEpageClassImg -I.

TestYLEbmpClassImg: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o YlePageClass.o
$(CPP) lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o YlePageClass.o source/TestYLEbmpClassImg.cpp -o TestYLEbmpClassImg -I.

TestYLErowClassImg: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o
$(CPP) lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o source/TestYLErowClassImg.cpp -o TestYLErowClassImg -I.

TestPNSClass: PNSClass.o
$(CPP) PNSClass.o source/TestPNSClass.cpp -o TestPNSClass -I.

YLEsubtextPrepare: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o YlePageClass.o
$(CPP) lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o YlePageClass.o source/MakeYLEsubtextPrepare.cpp -o YLEsubtextPrepare -I.

clean:
rm *.o Test* YLEsubtextPrepare

all: lodepng.o PNGimageClass.o YlebmpClass.o PNSClass.o YlerowClass.o YlePageClass.o TestPNGimageClass TestPNGimageClassCopyImg TestPNGimageClassCropTest TestYLEImageClassCopyImg TestYLEpageClassImg TestYLEbmpClassImg TestYLErowClassImg TestPNSClass YLEsubtextPrepare

Neuvoja/parannusehdotuksia otetaan vastaan.

Tavoitteena on julkistaa, kunhan siitä tulee edes jotensakin siedettävä, eikä kauheaa kuraa, kuten se nyt on.
« Viimeksi muokattu: 09.04.17 - klo:19.40 kirjoittanut kamara »

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #1 : 08.04.17 - klo:22.49 »
Koodia: [Valitse]
lodepng.o: #library/lonepng.cpp
$(CPP) -c library/lodepng.cpp -g -o lodepng.o

Lähdekoodin kääntäminen objektitiedostoiksi ei vaadi erillisiä sääntöjä vaan voit määritellä yleisen hahmosäännön ja nojata implisiittiseen mätsäykseen (jokaiselle .o -tiedostolle pitää olla vastaava .cpp -tiedosto):

Koodia: [Valitse]
%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@

kohde: lahde1.o lahde2.o lahde3.o
$(CXX) $(LDFLAGS) $^ -o $@


Tässä siistitty Makefile:

Koodia: [Valitse]
CXX = g++

LDFLAGS = -lm
CXXFLAGS = -g -I.

PNGOBJS = library/lodepng.o source/PNGImageClass.o
YLEOBJS = $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/YlerowClass.o source/YlePageClass.o
TESTOBJS = source/TestPNGimageClass.o source/TestPNGimageClassCopyImg.o source/TestPNGimageClassCropTest.o source/TestYLEImageClassCopyImg.o source/TestYLEpageClassImg.o source/TestYLEbmpClassImg.o source/TestYLErowClassImg.o source/TestPNSClass.o
ALLOBJS = $(YLEOBJS) $(TESTOBJS) source/MakeYLEsubtextPrepare.o

ALLTESTS = TestPNGImageClass TestPNGImageClassCopyImg TestPNGImageClassCropTest TestYLEImageClassCopyImg TestYLEPageClassImg TestYLErowClassImg TestPNSClass

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

TestPNGimageClass: $(PNGOBJS) source/TestPNGimageClass.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCopyImg: $(PNGOBJS) source/TestPNGImageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCropTest: $(PNGOBJS) source/TestPNGImageClassCropTest.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEImageClassCopyImg: $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/TestYLEImageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEpageClassImg: $(YLEOBJS) source/TestYLEpageClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEbmpClassImg: $(YLEOBJS) source/TestYLEbmpClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLErowClassImg: $(YLEOBJS) source/TestYLErowClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNSClass: source/PNSClass.o source/TestPNSClass.o
$(CXX) $(LDFLAGS) $^ -o $@

YLEsubtextPrepare: $(YLEOBJS) source/MakeYLEsubtextPrepare.o
$(CXX) $(LDFLAGS) $^ -o $@

clean:
rm $(ALLOBJS) $(ALLTESTS) YLEsubtextPrepare

alltests: $(ALLTESTS)

all: alltests YLEsubtextPrepare
« Viimeksi muokattu: 08.04.17 - klo:22.51 kirjoittanut nm »

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #2 : 09.04.17 - klo:15.40 »
Jotain en nyt sitten kuitenkaan näe.

Minun mielestäni tämä ei tee mitään, saati että ymmärtäisin, mitä sen pitäisi tehdä...
Koodia: [Valitse]
%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@

Tällaista herjaa heittää...
Koodia: [Valitse]
make
make: *** No rule to make target 'source/PNGImageClass.o', needed by 'TestPNGimageClass'. Seis.

Elikkäs ei ole ohjetta PNGImageClass.o:n tekemiseen. Tosiaan missään ei ole kyseistä tiedostoa, mutta miten se loadaan kätevästi ?

Tässä hakemistopuu...
Koodia: [Valitse]
$ ls -l *
-rwxr-xr-x 1 root root 2219 maali 27 20:16 compiletests.sh
-rw-rw-r-- 1 root root  202 joulu  9 19:04 configure.ac
-rw-rw-r-- 1 root root 1690 huhti  9 15:29 Makefile
-rw-rw-r-- 1 root root   38 joulu  9 19:14 Makefile.am
-rw-rw-r-- 1 root root   82 joulu  9 19:48 README

library:
yhteensä 708
-rw-rw-r-- 1 root root 220226 syys  17  2016 lodepng.cpp
-rw-rw-r-- 1 root root  82156 syys  17  2016 lodepng.h
-rw-rw-r-- 1 root root 414600 huhti  9 15:07 lodepng.o

scripts:
yhteensä 8
-rwxr-xr-x 1 root root 1157 syys  24  2016 makeOneLine.py
-rwxr-xr-x 1 root root  193 syys  24  2016 makesrtsubtitles.sh

source:
yhteensä 108
-rw-rw-r-- 1 root root  1804 syys  17  2016 linkedlist.cpp
-rw-rw-r-- 1 root root   440 joulu  9 20:24 Makefile.am
-rw-rw-r-- 1 root root  6532 maali 27 19:49 MakeYLEsubtextPrepare.cpp
-rw-rw-r-- 1 root root 13279 maali 27 19:51 PNGimageClass.cpp
-rw-rw-r-- 1 root root  2800 maali 27 20:21 PNGimageClass.h
-rw-rw-r-- 1 root root  2054 syys  24  2016 PNSClass.cpp
-rw-rw-r-- 1 root root   856 syys  24  2016 PNSClass.h
-rw-rw-r-- 1 root root    81 joulu  9 19:40 README
-rw-rw-r-- 1 root root  2065 maali 27 19:52 TestPNGimageClassCopyImg.cpp
-rw-rw-r-- 1 root root  1874 maali 27 20:23 TestPNGimageClass.cpp
-rw-rw-r-- 1 root root  2400 maali 27 19:52 TestPNGimageClassCropTest.cpp
-rw-rw-r-- 1 root root  1021 joulu  9 20:38 TestPNSClass.cpp
-rw-rw-r-- 1 root root  1063 maali 27 19:53 TestYLEbmpClassImg.cpp
-rw-rw-r-- 1 root root   856 maali 27 19:53 TestYLEImageClassCopyImg.cpp
-rw-rw-r-- 1 root root   465 maali 27 19:53 TestYLEpageClassImg.cpp
-rw-rw-r-- 1 root root  1063 maali 27 19:54 TestYLErowClassImg.cpp
-rw-rw-r-- 1 root root  8124 maali 27 19:54 YlebmpClass.cpp
-rw-rw-r-- 1 root root  1402 maali 27 20:28 YlebmpClass.h
-rw-rw-r-- 1 root root  1456 maali 27 19:54 YlePageClass.cpp
-rw-rw-r-- 1 root root   556 maali 27 20:28 YlePageClass.h
-rw-rw-r-- 1 root root  3356 maali 27 19:55 YlerowClass.cpp
-rw-rw-r-- 1 root root   744 maali 27 20:28 YlerowClass.h

test2:
yhteensä 208
-rw-rw-r-- 1 root root  6530 huhti  7 08:08 executeTests.sh
drwxrwxr-x 2 root root  4096 joulu  9 18:18 oma.d
-rw-rw-r-- 1 root root  9593 syys  26  2016 OmaTestiteksti.png
-rw-rw-r-- 1 root root   153 syys  26  2016 spumux.xml
-rw-rw-r-- 1 root root  3640 syys  26  2016 TestPNGimageClass1.png
-rw-rw-r-- 1 root root   406 syys  26  2016 TestPNGimageClass2.png
-rw-rw-r-- 1 root root   346 syys  26  2016 TestPNGimageClass3.png
-rw-rw-r-- 1 root root 80531 syys  26  2016 TestPNGimageClassCopyImg.png
-rw-rw-r-- 1 root root   680 syys  26  2016 TestPNGimageClassCropTest1.png
-rw-rw-r-- 1 root root  1457 syys  26  2016 TestPNGimageClassCropTest2.png
-rw-rw-r-- 1 root root   410 syys  26  2016 TestPNGimageClassPaintMethod.png
-rw-rw-r-- 1 root root    48 syys  26  2016 TestPNS.txt.png
-rw-rw-r-- 1 root root  1124 syys  26  2016 TestYLEImagecleanDusts.png
-rw-rw-r-- 1 root root  1124 syys  26  2016 TestYLEpagePrepare.png
-rw-rw-r-- 1 root root 62755 syys  26  2016 tux.png
« Viimeksi muokattu: 09.04.17 - klo:16.57 kirjoittanut kamara »

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #3 : 09.04.17 - klo:15.49 »
Jotain en nyt sitten kuitenkaan näe.

Minun mielestäni tämä ei tee mitään, saati että ymmärtäisin, mitä sen pitäisi tehdä...
Koodia: [Valitse]
%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@

Se on pattern rule eli eräänlainen geneerinen ohje, kuinka tiedosto mikätahansa.o luodaan tiedostosta mikätahansa.cpp. Make rakentaa rippuvuusketjun automaattisesti, ja siinä voi olla useampiakin tasoja. Makessa on myös sisäänrakennettuna sääntö .o-tiedostojen kääntämiseen .c-tiedostoista, mutta se ei nyt suoraan toimi, kun halutaan kääntää .cpp -päätteisiä tiedostoja.

Kannattaa selailla vaikka GNU maken dokumentaatiota, jos jäi jotain epäselvyyttä. Tässä eräs hyvä ohje, joka kattaa perusasiat: http://stackoverflow.com/questions/2481269/how-to-make-a-simple-c-makefile/2481326#2481326


Tällaista herjaa heittää...
Koodia: [Valitse]
make
make: *** No rule to make target 'source/PNGImageClass.o', needed by 'TestPNGimageClass'. Seis.

Elikkäs ei ole ohjetta PNGImageClass.o:n tekemiseen. Tosiaan missään ei ole kyseistä tiedostoa, mutta miten se loadaan kätevästi ?

Korjaa PNGOBJS-rivillä oleva typo source/PNGImageClass.o -> source/PNGimageClass.o
Siellä voi olla muitakin vastaavia, kun kirjoittelin osan käsin.
« Viimeksi muokattu: 09.04.17 - klo:15.58 kirjoittanut nm »

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #4 : 09.04.17 - klo:16.55 »
Kiitoksia käsi kädessä opastamisesta.

Tällaiselta näyttää koko uusi toimiva makefile...
Koodia: [Valitse]
CXX = g++

LDFLAGS = -lm
CXXFLAGS = -g -I.

PNGOBJS = library/lodepng.o source/PNGimageClass.o
YLEOBJS = $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/YlerowClass.o source/YlePageClass.o
TESTOBJS = source/TestPNGimageClass.o source/TestPNGimageClassCopyImg.o source/TestPNGimageClassCropTest.o source/TestYLEImageClassCopyImg.o source/TestYLEpageClassImg.o source/TestYLEbmpClassImg.o source/TestYLErowClassImg.o source/TestPNSClass.o
ALLOBJS = $(YLEOBJS) $(TESTOBJS) source/MakeYLEsubtextPrepare.o

ALLTESTS = TestPNGimageClass TestPNGimageClassCopyImg TestPNGimageClassCropTest TestYLEImageClassCopyImg TestYLEpageClassImg TestYLErowClassImg TestPNSClass

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

TestPNGimageClass: $(PNGOBJS) source/TestPNGimageClass.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCopyImg: $(PNGOBJS) source/TestPNGimageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCropTest: $(PNGOBJS) source/TestPNGimageClassCropTest.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEImageClassCopyImg: $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/TestYLEImageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEpageClassImg: $(YLEOBJS) source/TestYLEpageClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEbmpClassImg: $(YLEOBJS) source/TestYLEbmpClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLErowClassImg: $(YLEOBJS) source/TestYLErowClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNSClass: source/PNSClass.o source/TestPNSClass.o
$(CXX) $(LDFLAGS) $^ -o $@

YLEsubtextPrepare: $(YLEOBJS) source/MakeYLEsubtextPrepare.o
$(CXX) $(LDFLAGS) $^ -o $@

clean:
rm $(ALLOBJS) $(ALLTESTS) YLEsubtextPrepare

alltests: $(ALLTESTS)

all: alltests YLEsubtextPrepare

Se on pattern rule eli eräänlainen geneerinen ohje, kuinka tiedosto mikätahansa.o luodaan tiedostosta mikätahansa.cpp. Make rakentaa rippuvuusketjun automaattisesti, ja siinä voi olla useampiakin tasoja. Makessa on myös sisäänrakennettuna sääntö .o-tiedostojen kääntämiseen .c-tiedostoista, mutta se ei nyt suoraan toimi, kun halutaan kääntää .cpp -päätteisiä tiedostoja.

Kannattaa selailla vaikka GNU maken dokumentaatiota, jos jäi jotain epäselvyyttä. Tässä eräs hyvä ohje, joka kattaa perusasiat: http://stackoverflow.com/questions/2481269/how-to-make-a-simple-c-makefile/2481326#2481326

Kiitoksia, jotain sen tapaista arvelin sen olevakin, mutta pelkän säännön antaminen ei tehnyt tiedostoille mitään. (Tai ainakaan en huomannut heti, mitä se olisi tehnyt).

Siinä (virheessä) vain tuli sen verran paljon uusia asioita, joita en tiennyt, niin en osannut löytää virhettä niinkin yksinkertaisesta syystä kuin tiedostonnimen kirjoittamisesta, niin luulin siinä (käskyssä) olevan jokin pieni typo, enkä hoksannut tarkistaa tiedoston nimiä.

Kiitoksia vaivannäöstäsi jälleen kerran.

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #5 : 09.04.17 - klo:17.26 »
Kiitoksia, jotain sen tapaista arvelin sen olevakin, mutta pelkän säännön antaminen ei tehnyt tiedostoille mitään. (Tai ainakaan en huomannut heti, mitä se olisi tehnyt).

Se ei yksin teekään mitään, vaan tarvitset kohteen (target/goal), josta riippuvuusketjua lähdetään muodostamaan:

Koodia: [Valitse]
sometarget: somedependency.o
$(CXX) -o sometarget somedependency.o

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

Oletuksena make etsii tiedostosta ensimmäisen kohteen (pattern rule ei kelpaa), selvittää sen riippuvuudet ja tarkistaa onko kohde ennestään olemassa tiedostona. Jos se on olemassa, Make katsoo, onko riippuvuuksiin tehty muutoksia kohteen luomisajan jälkeen. Jos on tehty muutoksia, kohde luodaan uudelleen. Vastaavat tarkistukset tehdään rekursiivisesti riippuvuuspuussa edettäessä.

Yllä olevassa esimerkissä somedependency.o:lle ei ole määritelty omaa sääntöä, mutta se sopii tuohon pattern ruleen, kunhan somedependency.cpp on olemassa tiedostona tai jonkun toisen säännön kohteena.


Lisäyksenä Yle-tekstitys-Makefileen voisi vielä määrittää .PHONY-säännön, joka kertoo, että all, alltests ja clean eivät ole tiedostoja vaan phony-maaleja. Muuten make sekoilee, jos hakemistossa sattuisi olemaan tuon nimiset tiedostot: https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html

Koodia: [Valitse]
.PHONY: all alltests clean
Lisäksi all-sääntö kannattaisi siirtää ylimmäksi tiedoston alkuun tai muuttujamääritysten perään, jotta se suoritetaan oletuksena. Silloin voit kääntää koko roskan komennolla make komennon make all sijaan.

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #6 : 09.04.17 - klo:18.32 »
Vieläkään ei herjaamatta toimi.  :P

Jostain syystä make all ei tee source/TestYLEbmpClassImg.o tiedostoa, vaikka make TestYLEbmpClassImg sen tekee.

Tällainen se koodi on tällä hetkellä.
Koodia: [Valitse]
CXX = g++

LDFLAGS = -lm
CXXFLAGS = -g -I.

PNGOBJS = library/lodepng.o source/PNGimageClass.o
YLEOBJS = $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/YlerowClass.o source/YlePageClass.o
TESTOBJS = source/TestPNGimageClass.o source/TestPNGimageClassCopyImg.o source/TestPNGimageClassCropTest.o source/TestYLEImageClassCopyImg.o source/TestYLEpageClassImg.o source/TestYLEbmpClassImg.o source/TestYLErowClassImg.o source/TestPNSClass.o
ALLOBJS = $(YLEOBJS) $(TESTOBJS) source/MakeYLEsubtextPrepare.o

ALLTESTS = TestPNGimageClass TestPNGimageClassCopyImg TestPNGimageClassCropTest TestYLEImageClassCopyImg TestYLEpageClassImg TestYLErowClassImg TestPNSClass TestYLEbmpClassImg

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

all: alltests $(ALLOBJS) YLEsubtextPrepare

TestPNGimageClass: $(PNGOBJS) source/TestPNGimageClass.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCopyImg: $(PNGOBJS) source/TestPNGimageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCropTest: $(PNGOBJS) source/TestPNGimageClassCropTest.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEImageClassCopyImg: $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/TestYLEImageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEpageClassImg: $(YLEOBJS) source/TestYLEpageClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEbmpClassImg: $(YLEOBJS) source/TestYLEbmpClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLErowClassImg: $(YLEOBJS) source/TestYLErowClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNSClass: source/PNSClass.o source/TestPNSClass.o
$(CXX) $(LDFLAGS) $^ -o $@

YLEsubtextPrepare: $(YLEOBJS) source/MakeYLEsubtextPrepare.o
$(CXX) $(LDFLAGS) $^ -o $@

clean:
rm $(ALLOBJS) $(ALLTESTS) YLEsubtextPrepare

alltests: $(ALLTESTS)

.PHONY: all alltests clean

Siis vieläkään ei silmäni näe yksinkertaisia bugeja. Pahoitteluni. 

Edit - Voin lähettää bz-paketin, mikäli siitä on helpompi tutkia. Tosiaan kaikki ajotiedostot kääntyy, mutta ohjelma ei käännä kaikista ajotiedostoista objekteja.

Ei näy kaikki kääntyvänkään...  :(
« Viimeksi muokattu: 09.04.17 - klo:18.57 kirjoittanut kamara »

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #7 : 09.04.17 - klo:18.56 »
Vieläkään ei herjaamatta toimi.  :P

Jostain syystä make all ei tee source/TestYLEbmpClassImg.o tiedostoa, vaikka make TestYLEbmpClassImg sen tekee.

Hmm. Enpä minäkään näe syytä tuohon.

Edit - Voin lähettää bz-paketin, mikäli siitä on helpompi tutkia. Tosiaan kaikki ajotiedostot kääntyy, mutta ohjelma ei käännä kaikista ajotiedostoista objekteja.

Voisi auttaa joo.

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #8 : 09.04.17 - klo:19.13 »
Voisi auttaa joo.

Lähetin privaattiin osoitteen, jossa sijaitsee lähdekoodeineen.

Jossain vaiheessa varmaan julkaisen kyseisen, vaikkei sitä vielä näin keskeneräisenä kehtaa julkistaa.

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #9 : 09.04.17 - klo:19.24 »
Minulla toimii tällä Makefilella:

Koodia: [Valitse]
CXX = g++

LDFLAGS = -lm
CXXFLAGS = -g -I.

PNGOBJS = library/lodepng.o source/PNGimageClass.o
YLEOBJS = $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/YlerowClass.o source/YlePageClass.o
TESTOBJS = source/TestPNGimageClass.o source/TestPNGimageClassCopyImg.o source/TestPNGimageClassCropTest.o source/TestYLEImageClassCopyImg.o source/TestYLEpageClassImg.o source/TestYLEbmpClassImg.o source/TestYLErowClassImg.o source/TestPNSClass.o
ALLOBJS = $(YLEOBJS) $(TESTOBJS) source/MakeYLEsubtextPrepare.o

ALLTESTS = TestPNGimageClass TestPNGimageClassCopyImg TestPNGimageClassCropTest TestYLEImageClassCopyImg TestYLEpageClassImg TestYLEbmpClassImg TestYLErowClassImg TestPNSClass

.PHONY: all alltests clean

all: alltests YLEsubtextPrepare

alltests: $(ALLTESTS)

clean:
rm $(ALLOBJS) $(ALLTESTS) YLEsubtextPrepare

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

TestPNGimageClass: $(PNGOBJS) source/TestPNGimageClass.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCopyImg: $(PNGOBJS) source/TestPNGimageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNGimageClassCropTest: $(PNGOBJS) source/TestPNGimageClassCropTest.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEImageClassCopyImg: $(PNGOBJS) source/YlebmpClass.o source/PNSClass.o source/TestYLEImageClassCopyImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEpageClassImg: $(YLEOBJS) source/TestYLEpageClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLEbmpClassImg: $(YLEOBJS) source/TestYLEbmpClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestYLErowClassImg: $(YLEOBJS) source/TestYLErowClassImg.o
$(CXX) $(LDFLAGS) $^ -o $@

TestPNSClass: source/PNSClass.o source/TestPNSClass.o
$(CXX) $(LDFLAGS) $^ -o $@

YLEsubtextPrepare: $(YLEOBJS) source/MakeYLEsubtextPrepare.o
$(CXX) $(LDFLAGS) $^ -o $@

Koodia: [Valitse]
make
Koodia: [Valitse]
[...]
g++ -g -I. -c source/TestYLEbmpClassImg.cpp -o source/TestYLEbmpClassImg.o
g++ -lm library/lodepng.o source/PNGimageClass.o source/YlebmpClass.o source/PNSClass.o source/YlerowClass.o source/YlePageClass.o source/TestYLEbmpClassImg.o -o TestYLEbmpClassImg
[...]

Kannattaa muuten lisätä CXXFLAGS-muuttujaan argumentti -Wall ja korjata sen näyttämät varoitukset:

Koodia: [Valitse]
CXXFLAGS = -g -I. -Wall
« Viimeksi muokattu: 09.04.17 - klo:19.28 kirjoittanut nm »

kamara

  • Käyttäjä
  • Viestejä: 2944
    • Profiili
Vs: Kuinka makefilea parannellaan/tehdään ?
« Vastaus #10 : 09.04.17 - klo:19.33 »
Kiitoksia paljon...

Sillä toimii minullakin.

Se siis ei ollut kovin suuresta muutoksesta kysymys.