А.В. Столяров - Операционная среда ОС UNIX для изучающих программирование, страница 9
Описание файла
PDF-файл из архива "А.В. Столяров - Операционная среда ОС UNIX для изучающих программирование", который расположен в категории "". Всё это находится в предмете "операционные системы" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 9 страницы из PDF
Îáîçíà÷èìèìÿ êîìïèëÿòîðà C ïåðåìåííîé CC, à îáùèå ïàðàìåòðû êîìïèëÿöèè ïåðåìåííîé CFLAGS14 .Òîãäà íàø Makele ìîæíî ïåðåïèñàòü ñëåäóþùèì îáðàçîì:CC = gccCFLAGS = -g -Wall -ansi -pedanticmod1.o: mod1.c mod1.h$(CC) $(CFLAGS) -c mod1.c -o mod1.omod2.o: mod2.c mod2.h$(CC) $(CFLAGS) -c mod2.c -o mod2.oprog: main.c mod1.o mod2.o$(CC) $(CFLAGS) main.c mod1.o mod2.o -o prog 4.3.3. Ïðåäîïðåäåëåííûå ïåðåìåííûå è ïñåâäîïåðåìåííûåÑóùåñòâóþò îïðåäåëåííûå ñîãëàøåíèÿ îá èìåíàõ ïåðåìåííûõ, ïðè÷åì íåêîòîðûì ïåðåìåííûì óòèëèòà make ïðèñâàèâàåò çíà÷åíèÿ ñàìà,åñëè ñîîòâåòñòâóþùèå çíà÷åíèÿ íå çàäàíû ÿâíî.Âîò íåêîòîðûå òðàäèöèîííûå èìåíà ïåðåìåííûõ:• CC êîìàíäà âûçîâà êîìïèëÿòîðà ÿçûêà C;• CFLAGS ïàðàìåòðû äëÿ êîìïèëÿòîðà ÿçûêà C;• CXX êîìàíäà âûçîâà êîìïèëÿòîðà ÿçûêà C++;• CXXFLAGS ïàðàìåòðû äëÿ êîìïèëÿòîðà ÿçûêà C++;14 Ïðè÷èíû âûáîðà èìåííî òàêèõ îáîçíà÷åíèé ñòàíóò ÿñíû èç äàëüíåéøåãî èçëîæåíèÿ.42• CPPFLAGS ïàðàìåòðû ïðåïðîöåññîðà (îáû÷íî ñþäà ïîìåùàþòïðåäîïðåäåëåííûå ìàêðîïåðåìåííûå);• LD êîìàíäà âûçîâà ñèñòåìíîãî ëèíêåðà (ðåäàêòîðà ñâÿçåé);• MAKE êîìàíäà âûçîâà óòèëèòû make ñî âñåìè ïàðàìåòðàìè.Ïî óìîë÷àíèþ ïåðåìåííûå CC, CXX, LD è MAKE èìåþò ñîîòâåòñòâóþùèåçíà÷åíèÿ, ñïðàâåäëèâûå äëÿ äàííîé ñèñòåìû è â äàííîé ñèòóàöèè.
Çíà÷åíèÿ îñòàëüíûõ ïåðå÷èñëåííûõ ïåðåìåííûõ ïî óìîë÷àíèþ ïóñòû.Òàêèì îáðàçîì, ïðè íàïèñàíèè Makele èç ïðåäûäóùåãî ïàðàãðàôàìû ìîãëè áû ïðîïóñòèòü ñòðîêó, â êîòîðîé çàäàåòñÿ çíà÷åíèå ïåðåìåííîé CC, â íàäåæäå, ÷òî ñîîòâåòñòâóþùåå çíà÷åíèå ïåðåìåííàÿ ïîëó÷èòáåç íàøåé ïîìîùè.Êðîìå òàêèõ ïåðåìåííûõ îáùåãî íàçíà÷åíèÿ, â êàæäîé öåëè ìîãóòèñïîëüçîâàòüñÿ òàê íàçûâàåìûå ïñåâäîïåðåìåííûå. Ïåðå÷èñëèì íàèáîëåå èíòåðåñíûå èç íèõ:• $@ èìÿ òåêóùåé öåëè;• $< èìÿ ïåðâîé öåëè èç ñïèñêà çàâèñèìîñòåé;• $^ âåñü ñïèñîê çàâèñèìîñòåé.Ñ èñïîëüçîâàíèåì ýòèõ ïåðåìåííûõ ìû ìîæåì ïåðåïèñàòü íàøMakele ñëåäóþùèì îáðàçîì:CFLAGS = -g -Wallmod1.o: mod1.c mod1.h$(CC) $(CFLAGS) -c $< -o $@mod2.o: mod2.c mod2.h$(CC) $(CFLAGS) -c $< -o $@prog: main.c mod1.o mod2.o$(CC) $(CFLAGS) $^ -o $@ 4.3.4.
Îáîáùåííûå öåëèÊàê ìîæíî çàìåòèòü, â òîì âàðèàíòå Makele, êîòîðûé ìû íàïèñàëè â êîíöå ïðåäûäóùåãî ïàðàãðàôà, ïðàâèëà äëÿ ñáîðêè îáîèõ äîïîëíèòåëüíûõ ìîäóëåé îêàçàëèñü ñîâåðøåííî îäèíàêîâûìè. Ìîæíî ïîéòè43äàëüøå è çàäàòü îäíî îáîáùåííîå ïðàâèëî äëÿ ïîñòðîåíèÿ îáúåêòíîãî ôàéëà äëÿ ëþáîãî ìîäóëÿ, íàïèñàííîãî íà ÿçûêå C, èñõîäíûé ôàéëêîòîðîãî èìååò èìÿ ñ ñóôôèêñîì .c, à çàãîëîâî÷íûé ôàéë èìÿ ñ ñóôôèêñîì .h:%.o: %.c %.h$(CC) $(CFLAGS) -c $< -o $@Åñëè òåïåðü çàäàòü ñïèñîê äîïîëíèòåëüíûõ ìîäóëåé ñ ïîìîùüþ ïåðåìåííîé, ïîëó÷èì ñëåäóþùèé âàðèàíò Makele:OBJMODULES = mod1.o mod2.oCFLAGS = -g -Wall -ansi -pedantic%.o: %.c %.h$(CC) $(CFLAGS) -c $< -o $@prog: main.c $(OBJMODULES)$(CC) $(CFLAGS) $^ -o $@Òåïåðü äëÿ äîáàâëåíèÿ ê ïðîãðàììå íîâîãî ìîäóëÿ íàì äîñòàòî÷íî äîáàâèòü èìÿ åãî îáúåêòíîãî ôàéëà ê çíà÷åíèþ ïåðåìåííîé OBJMODULES.Åñëè ïåðå÷èñëåíèå ìîäóëåé ÷åðåç èìåíà îáúåêòíûõ ôàéëîâ ïðåäñòàâëÿåòñÿ íååñòåñòâåííûì, ìîæíî çàìåíèòü ïåðâóþ ñòðîêó Makeleñëåäóþùèìè äâóìÿ ñòðîêàìè:SRCMODULES = mod1.c mod2.cOBJMODULES = $(SRCMODULES:.c=.o)Çàïèñü $(SRCMODULES:.c=.o) îçíà÷àåò, ÷òî íåîáõîäèìî âçÿòü çíà÷åíèå ïåðåìåííîé SRCMODULES è â êàæäîì âõîäÿùåì â ýòî çíà÷åíèå ñëîâåçàìåíèòü ñóôôèêñ .c íà .o. 4.3.5.
ÏñåâäîöåëèÓòèëèòó make ìîæíî èñïîëüçîâàòü íå òîëüêî äëÿ ïîñòðîåíèÿ ôàéëîâ, íî è äëÿ âûïîëíåíèÿ, âîîáùå ãîâîðÿ, ïðîèçâîëüíûõ äåéñòâèé. Äîáàâèì ê íàøåìó ôàéëó äâå äîïîëíèòåëüíûå öåëè:run: prog./progclean:rm -f *.o prog44Òåïåðü ïî êîìàíäå make run óòèëèòà make ïðîèçâåäåò, åñëè íåîáõîäèìî, ñáîðêó íàøåé ïðîãðàììû è çàïóñòèò åå. Ñ ïîìîùüþ æå êîìàíäû make clean ìû ìîæåì î÷èñòèòü ðàáî÷óþ äèðåêòîðèþ îò îáúåêòíûõè èñïîëíÿåìûõ ôàéëîâ (íàïðèìåð, åñëè íàì ïîíàäîáèòñÿ ïðîèçâåñòèñáîðêó ïðîãðàììû ñ íóëÿ).Òàêèå öåëè îáû÷íî íàçûâàþò ïñåâäîöåëÿìè, ïîñêîëüêó èõ èìåíà íåîáîçíà÷àþò èìåí ñîçäàâàåìûõ ôàéëîâ. 4.3.6. Àâòîìàòè÷åñêîå îòñëåæèâàíèå çàâèñèìîñòåé áîëåå ñëîæíûõ ïðîåêòàõ ìîäóëè ìîãóò èñïîëüçîâàòü çàãîëîâî÷íûå ôàéëû äðóãèõ ìîäóëåé, ÷òî äåëàåò íåîáõîäèìîé ïåðåêîìïèëÿöèþìîäóëÿ ïðè èçìåíåíèè çàãîëîâî÷íîãî ôàéëà, íå îòíîñÿùåãîñÿ ê ýòîìóìîäóëþ.
Èíôîðìàöèþ î òîì, êàêîé ìîäóëü îò êàêèõ ôàéëîâ çàâèñèò,ìîæíî çàäàòü âðó÷íóþ, îäíàêî ýòîò ñïîñîá ïðèâåäåò ê òðóäíîñòÿì âáîëüøèõ ïðîãðàììàõ, ïîñêîëüêó ïðîãðàììèñò ïðè ìîäèôèêàöèè èñõîäíûõ ôàéëîâ ìîæåò ñëó÷àéíî çàáûòü âíåñòè èçìåíåíèÿ â Makele.Áîëåå ïðàâèëüíûì ðåøåíèåì áóäåò ïîðó÷èòü îòñëåæèâàíèå çàâèñèìîñòåé êîìïüþòåðó. Óòèëèòà make ïîçâîëÿåò íàðÿäó ñ îáîáùåííûìïðàâèëîì óêàçàòü ñïèñîê çàâèñèìîñòåé äëÿ ïîñòðîåíèÿ êîíêðåòíûõ ìîäóëåé. Íàïðèìåð:%.o: %.c$(CC) $(CFLAGS) -c $< -o $@mod1.o: mod1.c mod1.h mod2.h mod3.h ýòîì ñëó÷àå äëÿ ïîñòðîåíèÿ ôàéëà mod1.o áóäåò èñïîëüçîâàíî îáîáùåííîå ïðàâèëî (ïîñêîëüêó íèêàêèõ êîìàíä â öåëè mod1.o ìû íå óêàçàëè), íî ñïèñîê çàâèñèìîñòåé áóäåò èñïîëüçîâàí èç öåëè mod1.o.Ñïèñêè çàâèñèìîñòåé ìîæíî ïîñòðîèòü ñ ïîìîùüþ êîìïèëÿòîðà.×òîáû ïîëó÷èòü ñòðîêó, ïîäîáíóþ ïîñëåäíåé ñòðîêå âûøåïðèâåäåííîãîïðèìåðà, íåîáõîäèìî äàòü êîìàíäógcc -MM mod1.cÅñëè ðåçóëüòàò âûïîëíåíèÿ òàêîé êîìàíäû ïåðåíàïðàâèòü â ôàéë, òîýòîò ôàéë ìîæíî áóäåò âêëþ÷èòü â íàø Makele äèðåêòèâîé include.Ýòà äèðåêòèâà èìååò ñïåöèàëüíóþ ôîðìó ñî çíàêîì -, ïðè èñïîëüçîâàíèè êîòîðîé make íå âûäàåò îøèáîê, åñëè ôàéë íå íàéäåí.
Åñëè èñïîëüçîâàòü äëÿ ôàéëà çàâèñèìîñòåé èìÿ deps.mk, ñîîòâåòñòâóþùàÿ äèðåêòèâà áóäåò âûãëÿäåòü òàê:45-include deps.mkÁîëåå òîãî, åñëè ïðåäóñìîòðåòü öåëü äëÿ ãåíåðàöèè ôàéëà, âêëþ÷àåìîãî òàêîé äèðåêòèâîé, íàïðèìåð:deps.mk: $(SRCMODULES)$(CC) -MM $^ > $@óòèëèòà make, ïðåæäå ÷åì íà÷àòü ïîñòðîåíèå ëþáûõ äðóãèõ öåëåé, áóäåò ïûòàòüñÿ ïîñòðîèòü âêëþ÷àåìûé ôàéë.Îòìåòèì, ÷òî òàêîå ïîâåäåíèå íåæåëàòåëüíî äëÿ ïñåâäîöåëè clean,ïîñêîëüêó äëÿ î÷èñòêè ðàáî÷åé äèðåêòîðèè îò ìóñîðà ïîñòðîåíèå ôàéëîâ çàâèñèìîñòåé íå íóæíî è òîëüêî îòíèìàåò ëèøíåå âðåìÿ. ×òîáû èçáåæàòü ýòîãî, ñëåäóåò ñíàáäèòü äèðåêòèâó -include óñëîâíîé êîíñòðóêöèåé, èñêëþ÷àþùåé ýòó ñòðîêó èç ðàññìîòðåíèÿ, åñëè åäèíñòåííîé öåëüþ, çàäàííîé â êîìàíäíîé ñòðîêå, ÿâëÿåòñÿ öåëü clean.
Ýòî äåëàåòñÿ ñïîìîùüþ äèðåêòèâû ifneq è âñòðîåííîé ïåðåìåííîé MAKECMDGOALS:ifneq (clean, $(MAKECMDGOALS))-include deps.mkendifÎêîí÷àòåëüíî Makele áóäåò âûãëÿäåòü òàê:SRCMODULES = mod1.c mod2.cOBJMODULES = $(SRCMODULES:.c=.o)CFLAGS = -g -Wall -ansi -pedantic%.o: %.c %.h$(CC) $(CFLAGS) -c $< -o $@prog: main.c $(OBJMODULES)$(CC) $(CFLAGS) $^ -o $@ifneq (clean, $(MAKECMDGOALS))-include deps.mkendifdeps.mk: $(SRCMODULES)$(CC) -MM $^ > $@clean:rm -f *.o prog46Ëèòåðàòóðà[1] Áàóðí Ñ.
Îïåðàöèîííàÿ ñèñòåìà UNIX. Ì.:Ìèð, 1986.[2] Ðîáà÷åâñêèé À. Ì. Îïåðàöèîííàÿ ñèñòåìà UNIX. Èçä-âîÑàíêò-Ïåòåðáóðã, 1997.BHV,ÑîäåðæàíèåÏðåäèñëîâèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. Ââåäåíèå34 2. Ïîëüçîâàòåëüñêèå ñðåäñòâà ÎÑ Unix 2.1. 2.2. 2.3. 2.4. 2.5.Ïåðâûé ñåàíñ . . . . . . . . . . . . . . . . .
. . . . . . . .Äåðåâî êàòàëîãîâ. Ðàáîòà ñ ôàéëàìè . . . . . . . . . . .Ðåäàêòîðû òåêñòîâ . . . . . . . . . . . . . . . . . . . . . .Ïðàâà äîñòóïà ê ôàéëàì . . . . . . . . . . . . . . . . . .Ïåðåíàïðàâëåíèÿ ââîäà-âûâîäà â èíòåðïðåòàòîðå BourneShell . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 2.6. Ïðîöåññû . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7. Âûïîëíåíèå â ôîíîâîì ðåæèìå . . . . . . . . . . . . . . 2.8. Ýëåêòðîííàÿ äîêóìåíòàöèÿ . . . . . . . . . . . . . . . . . 2.9. Äîïîëíèòåëüíûå âîçìîæíîñòè . . . . . . . . . . . . . . .6. 6. 7. 9. 15.....1719202224 3.
Ãðàôè÷åñêàÿ îáîëî÷êà X Window28 4. Èíñòðóìåíòàðèé ïðîãðàììèñòà35Ëèòåðàòóðà47 3.1. Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2. Çàïóñê X Window è âûáîð îêîííîãî ìåíåäæåðà . . . . . . 30 3.3. Ðàáîòà ñ êëàññè÷åñêèìè îêîííûìè ìåíåäæåðàìè . . .
. . 32 4.1. Êîìïèëÿòîð gcc/g++ . . . . . . . . . . . . . . . . . . . . . 35 4.2. Îòëàä÷èê gdb . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.3. Ñèñòåìà àâòîìàòè÷åñêîé ñáîðêè (óòèëèòà make) . . . . . 4047Ýëåêòðîííóþ âåðñèþ ýòîé è äðóãèõêíèã àâòîðà ìîæíî íàéòè íàîôèöèàëüíîì ñàéòå àâòîðà â ñåòèÈíòåðíåòhttp://www.stolyarov.info48.