Takaitaccen Gabatarwa ga Makefiles a Buɗewar Software Ci gaban Software tare da GNU Make


GNU Make kayan aiki ne na haɓakawa wanda ke ƙayyade ɓangarori na ƙayyadaddun tushen lambar da za a sake haɗawa kuma yana iya ba da umarni don aiwatar da waɗannan ayyukan akan tushen lambar. Ana iya amfani da wannan ƙayyadaddun kayan aikin make tare da kowane yaren shirye-shirye muddin ana iya yin harsashi daga harsashi ta hanyar ba da umarni.

Domin amfani da GNU Make, muna buƙatar samun wasu saitin dokoki waɗanda ke bayyana alaƙa tsakanin fayiloli daban-daban a cikin shirinmu da umarni don sabunta kowane fayil. An rubuta waɗannan a kan wani fayil na musamman da ake kira 'makefile'. Umurnin 'make' yana amfani da 'makefile' tushen bayanai da lokutan gyare-gyare na ƙarshe na fayilolin don yanke shawarar abin da za a sake tattara duk fayilolin.

Abubuwan da ke cikin Makefile

Gabaɗaya ‘makefiles’ sun ƙunshi nau'ikan abubuwa guda 5 waɗanda suka haɗa da: ƙayyadaddun ƙa'idodi, ƙa'idodin ƙayyadaddun bayanai, ma'anoni masu canzawa, umarni, da sharhi.

  1. Ƙa'idar tabbatacciyar doka tana ƙayyadaddun yadda ake yin/sake yin fayiloli ɗaya ko fiye (wanda ake kira hari, za a bayyana daga baya) da lokacin da za a yi haka.
  2. Ƙa'idar takaice tana ƙayyadaddun yadda ake yin/sake yin fayiloli ɗaya ko fiye bisa sunayensu. Ya bayyana yadda sunan fayil ɗin manufa ke da alaƙa da fayil ɗaya mai suna mai kama da manufa.
  3. A ma'anar ma'anar layi ne da ke ƙayyadad da ƙimar kirtani don maɓalli da za a musanya daga baya.
  4. A directive umarni ne don yin wani abu na musamman yayin karatun makefile.
  5. Ana amfani da alamar '#' tana wakiltar farkon sharhi a cikin makefiles. An yi watsi da layin da ke farawa da '#.

Bayanan da ke gaya wamake yadda ake sake tara tsarin ya fito ne daga karanta tushen bayanan da ake kiramakefile. Mai sauƙaƙamakefile zai ƙunshi ƙa'idodi na waɗannan kalmomi masu zuwa:

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

An bayyana manufa don zama fayil ɗin fitarwa da shirin ya samar. Hakanan yana iya zama masu hari, wanda za a yi bayani a ƙasa. Misalan fayilolin da aka yi niyya sun haɗa da abubuwan aiwatarwa, fayilolin abu ko maƙasudin lalata kamar tsabta, saka, uninstall da sauransu.

A sharadi fayil ne da ake amfani da shi azaman shigarwa don ƙirƙirar fayilolin da aka yi niyya.

ARecipe shine aikin dayi yayi don ƙirƙirar fayil ɗin manufa bisa abubuwan da ake buƙata. Wajibi ne a sanya alamar shafi kafin kowane girke-girke a cikin makefilessai dai idan mun ƙayyade ma'anar '.RECIPEPREFIX' don ayyana wasu halaye a matsayin prefix zuwa girke-girke.

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

A cikin misalin da ke sama mun yi amfani da fayilolin tushen 4 C da fayilolin kai guda biyu don ƙirƙirar na ƙarshe. Anan kowane fayil na '.o' duka manufa ne da buƙatu a cikin makefile. Yanzu duba sunan manufa ta ƙarshetsabta. Aiki ne kawai maimakon fayil ɗin manufa.

Tun da yawanci ba ma buƙatar wannan yayin haɗawa, ba a rubuta shi azaman abin da ake buƙata ba a cikin wasu dokoki. Manufofin da ba sa nufin fayiloli amma ayyuka ne kawai ana kiran su phony targets. Ba za su sami wasu buƙatu kamar sauran fayilolin da aka yi niyya ba.

Ta hanyar tsoho make yana farawa tare da manufa ta farko a cikin ‘makefile’ kuma ana kiranta da ‘maƙasudin tsoho’. Idan muka yi la’akari da misalinmu, muna dana ƙarshea matsayin maƙasudinmu na farko. Tun da abubuwan da ake buƙata sun haɗa da wasu fayilolin abu waɗanda za a sabunta su kafin ƙirƙirar na ƙarshe. Kowane ɗayan waɗannan abubuwan da ake buƙata ana sarrafa su bisa ga ka'idodinsu.

Sabuntawa yana faruwa idan akwai gyare-gyare da aka yi zuwa fayilolin tushen ko fayilolin kan kai ko kuma idan fayil ɗin abun babu kwata-kwata. Bayan sake tattara fayilolin abu masu mahimmanci, sa yana yanke shawarar ko za a sake haɗawa na ƙarshe ko a'a. Dole ne a yi wannan idan fayil ɗin na ƙarshe ba ya wanzu, ko kuma idan wani fayil ɗin abu ya fi shi sabo.

Don haka idan muka canza fayil ɗin inter.c, sannan a kunna make zai sake tattara fayil ɗin tushen don sabunta fayil ɗin abu inter.o da kuma sai ku danganta na ƙarshe.

A cikin misalinmu, dole ne mu jera duk fayilolin abu sau biyu a cikin ka'ida don na ƙarshe kamar yadda aka nuna a ƙasa.

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

Don guje wa irin wannan kwafin, za mu iya gabatar da masu canji don adana jerin abubuwan fayilolin da ake amfani da su a cikinmakefile. Ta amfani da m OBJ za mu iya sake rubuta samfurinmakefile zuwa irin wannan da aka nuna a ƙasa.

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)

Kamar yadda muka gani a cikin misalimakefile, za mu iya ayyana dokoki don tsaftace tushen tushen ta hanyar cire fayilolin abubuwan da ba'a so bayan haɗawa. A ce mun faru da samun fayil ɗin manufa mai suna tsabta. Ta yayazai sa bambanta yanayi biyun da ke sama? Anan ya zo manufar makasudin lalata.

Maƙasudin ɓatanci shine wanda ba ainihin sunan fayil ba ne, maimakon sunan kawai don aiwatar da girke-girke a duk lokacin da aka yi buƙatun bayyane daga makefile. Babban dalilin yin amfani da maƙasudin ɓacin rai shine don guje wa rikici tare da fayil mai suna iri ɗaya. Wani dalili shine don inganta aiki.

Don bayyana wannan abu, zan bayyana wani juyi na bazata. Girke-girke na tsabta ba za a aiwatar da shi ta tsohuwa a kan gudanar da make. Maimakon haka ya zama dole a yi kira iri ɗaya ta hanyar ba da umarni yi tsabta.

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

Yanzu gwada ƙirƙirarmakefiles don tushen lambar ku. Jin kyauta don yin sharhi anan tare da shakku.