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.