GNU Make bilen açyk çeşme programma üpjünçiligini döretmekde makfaýllara gysgaça giriş


GNU Make, belli bir kod bazasynyň täzeden düzülmeli böleklerini kesgitleýän we kod amallarynda bu amallary ýerine ýetirmek üçin buýruklar berip biljek ösüş kömekçisidir. Bu aýratyn ýasamak peýdasy, programma düzmek dili bilen ulanylyp bilner, şertleri buýruklar bilen gabykdan ýerine ýetirip bolar.

GNU Make-ni ulanmak üçin programmamyzdaky dürli faýllaryň arasyndaky baglanyşygy kesgitleýän we her faýly täzelemegiň buýruklaryny kesgitleýän käbir düzgünler bolmaly. Bular makefile atly ýörite faýla ýazylýar. ýasamak buýrugy, makefile maglumat binýadyny we faýllaryň haýsysynyň täzeden düzüljekdigini kesgitlemek üçin faýllaryň soňky üýtgetme wagtlaryny ulanýar.

Makefile mazmuny

Adatça “ ýasama faýllar ” 5 görnüşi öz içine alýar: aç-açan düzgünler, aç-açan düzgünler, üýtgeýän kesgitlemeler, görkezmeler we düşündirişler.

  1. aç-açan düzgün bir ýa-da birnäçe faýly nädip ýasamaly/täzeden ýasamalydygyny (nyşanalar diýilýär, soň düşündiriler) we haçan etmelidigini kesgitleýär.
  2. aç-açan düzgün bir ýa-da birnäçe faýly atlaryna görä nädip ýasamaly/täzeden düzmelidigini kesgitleýär. Maksatly faýlyň adynyň nyşana meňzeş ady bolan bir faýl bilen nähili baglanyşýandygyny düşündirýär.
  3. üýtgeýän kesgitleme üýtgeýjiniň soňraky çalşylmagy üçin setir bahasyny kesgitleýän setir.
  4. görkezme makfile okaýarka aýratyn bir zat etmek üçin görkezme.
  5. # nyşany, ýasama faýllaryň içindäki teswir başlangyjy aňladýar. # Bilen başlanan setir diňe hasaba alynmaýar.

Ulgamy nädip düzmelidigini ýasamak diýýän maglumatlar, makefile atly maglumat bazasyny okamakdan gelýär. Simpleönekeý makefile aşakdaky sintaksisiň düzgünlerinden ybarat bolar:

target ... : prerequisites ... 
	recipe 
... 
...

maksat programma tarapyndan döredilen çykyş faýly hökmünde kesgitlenilýär. Şeýle hem aşakda düşündiriljek telefon nyşanlary bolup biler. Maksatly faýllara mysal hökmünde ýerine ýetirilýänler, obýekt faýllary ýa-da arassa , gurmak , aýyrmak we ş.m. ýaly nyşanlary öz içine alýar.

deslapky şert maksatly faýllary döretmek üçin giriş hökmünde ulanylýan faýl.

resept deslapky şertlere esaslanyp maksatly faýly döretmek üçin edýän ýerine ýetirýän işdir. Reseptiň prefiksi hökmünde käbir beýleki nyşanlary kesgitlemek üçin .RECIPEPREFIX üýtgeýjisini kesgitlemesek, makfaýllaryň içindäki her reseptiň öňünde goýma belgisini goýmaly.

final: main.o end.o inter.o start.o
	gcc -o final main.o end.o inter.o start.o
main.o: main.c global.h
	gcc -c main.c
end.o: end.c local.h global.h
	gcc -c end.c
inter.o: inter.c global.h
	gcc -c inter.c
start.o: start.c global.h
	gcc -c start.c
clean:
	rm -f main.o end.o inter.o start.o

Aboveokardaky mysalda ýerine ýetirip boljak jemleýji döretmek üçin 4 C çeşme faýly we iki sözbaşy faýly ulandyk. Bu ýerde her .o faýly hem maksat, hem-de makefile -iň içinde zerur şert. Indi iň soňky maksat arassa göz aýlaň. Maksatly faýl däl-de, diňe hereket.

Adatça, düzüliş wagtynda munuň zerurlygy ýok, şonuň üçin başga düzgünlerde hökmany şert hökmünde ýazylmaýar. Faýllara degişli däl, ýöne diňe hereketler bolan nyşanlara fony nyşany diýilýär. Beýleki maksatly faýllar ýaly deslapky şertler bolmaz.

Dymmaklyk boýunça ýasamak makefile -iň birinji nyşany bilen başlaýar we başlangyç maksat diýilýär. Mysalymyzy göz öňünde tutsak, ilkinji maksadymyz hökmünde jemleýji bar. Zerur şertlerde jemleýji döretmezden ozal täzelenmeli beýleki obýekt faýllary bar. Bu şertleriň her biri öz düzgünlerine laýyklykda işlenýär.

Çeşme faýllaryna ýa-da sözbaşy faýllaryna üýtgeşmeler girizilen ýa-da obýekt faýly düýbünden ýok bolsa, öwezini dolmak ýüze çykýar. Zerur obýekt faýllary täzeden düzülenden soň, ýasamak jemleýji ýa-da täzeden baglanyşmak kararyna gelýär. faýl faýly ýok bolsa ýa-da haýsydyr bir obýekt faýly ondan täze bolsa, edilmeli.

Şeýlelik bilen, inter.c faýlyny üýtgeden bolsak, ýasamak işledilende obýekt faýlyny inter.o täzelemek üçin deslapky faýly täzeden düzer we soň jemleýji baglanyşdyryň.

Mysal üçin, aşakda görkezilişi ýaly jemleýji üçin ähli obýekt faýllaryny düzgünde iki gezek sanamaly bolduk.

final: main.o end.o inter.o start.o
	gcc -o final main.o end.o inter.o start.o

Şeýle köpeltmeleriň öňüni almak üçin, makefile -iň içinde ulanylýan obýekt faýllarynyň sanawyny saklamak üçin üýtgeýjileri girizip bileris. Üýtgeýji OBJ ulanyp, makefile nusgasyny aşakda görkezilen şuňa meňzeş görnüşde täzeden ýazyp bileris.

OBJ = main.o end.o inter.o start.o
final: $(OBJ)
	gcc -o final $(OBJ)
main.o: main.c global.h
	gcc -c main.c
end.o: end.c local.h global.h
	gcc -c end.c
inter.o: inter.c global.h
	gcc -c inter.c
start.o: start.c global.h
	gcc -c start.c
clean:
	rm -f $(OBJ)

makefile mysalynda görşümiz ýaly, düzülenden soň islenmeýän obýekt faýllaryny aýyrmak bilen çeşme katalogyny arassalamak düzgünlerini kesgitläp bileris. arassa atly maksatly faýlymyz bar diýeliň. Aboveokardaky iki ýagdaýy nädip ýasap edip biler? Ynha, galp nyşanlar düşünjesi gelýär.

Galp maksat, faýlyň ady däl, tersine, makefile -den aç-açan haýyş edilende, reseptiň ýerine ýetirilmegi üçin at. Galp nyşany ulanmagyň esasy sebäbi, şol bir atdaky faýl bilen gapma-garşylykdan gaça durmakdyr. Başga bir sebäp, öndürijiligi gowulandyrmakdyr.

Bu zady düşündirmek üçin garaşylmadyk bir öwrümi açaryn. arassa resept, ýasamak işledilende ýerine ýetirilmez. Munuň ýerine arassalamak buýrugy bermek bilen şol bir zady çagyrmak zerur.

.PHONY: clean
clean:
	rm -f $(OBJ)

Indi öz kod bazanyňyz üçin makefiles döretmäge synanyşyň. Şübheleriňiz bilen bu ýerde düşündiriş bermäge çekinmäň.