Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: kamara - 08.04.17 - klo:19.50
-
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...
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.
-
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 (https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html#SEC98) ja nojata implisiittiseen mätsäykseen (jokaiselle .o -tiedostolle pitää olla vastaava .cpp -tiedosto):
%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
kohde: lahde1.o lahde2.o lahde3.o
$(CXX) $(LDFLAGS) $^ -o $@
Tässä siistitty Makefile:
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
-
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ä...
%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
Tällaista herjaa heittää...
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...
$ 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
-
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ä...
%.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ää...
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.
-
Kiitoksia käsi kädessä opastamisesta.
Tällaiselta näyttää koko uusi toimiva makefile...
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.
-
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:
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
.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.
-
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ä.
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... :(
-
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.
-
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.
-
Minulla toimii tällä Makefilella:
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 $@
make
[...]
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:
CXXFLAGS = -g -I. -Wall
-
Kiitoksia paljon...
Sillä toimii minullakin.
Se siis ei ollut kovin suuresta muutoksesta kysymys.