Makefile
от ILuxWiki
Информация за това какво има в Mаkefile и как се използва
При стартирането си make проверява наколко файла за инструкций, в повечето варианти първия съдържа специфични настройки отнасящи се за система, а Mаkefile съдържа оказанията за свършване на конкретната задача.
Mаkefile-йловете могат да съдържат следните компоменти
- коментари (comments)
- зависимости (dependency)
- редове (lines)
- команди (directives)
- макроси (macros)
- отговорни файлове (response files)
- правила (rules)
- shell команди (shell lines)
Продължителни редове - редовете в Mаkefile могат да бъдат доста дълги затова се налага по някога те да бъдат пренесени на нов ред. Това става чрез символа \. Ето пример:
first_part_of_line second_part_of_line
може да се запише като:
first_part_of_line \ second_part_of_line
Съдържание |
Коментари
За да запишете коментар във файла е необходимо преди текста да въведете "#". Целия текст след този символ до края на реда ще се игнорира от make. Ето едно интересно използване:
line_on \ line_two # more_line_two \ line_three
се възприема като:
line_on line_two line_three
Правила
Правилата казват на make едновременно КОГА и КАК да направи файл. За пример, ако се очаква вашия проект да компилира кода от файловете main.c и io.c след което да го свържи и да създаде изпълнимия project.exe. Ето пример от съдържанието на подобен файл:
project.exe : main.obj io.obj
tlink c0s main.obj io.obj, project.exe,, cs /Lf:\bc\lib
main.obj : main.c
bcc –ms –c main.c
io.obj : io.c
bcc –ms –c io.c
Този файл съдържа 3 правила: project.exe, main.obj и io.obj. Правилата посочени тук се наричат: ЯСНИ,КАТЕГОРИЧНИ (explicit rules). Съществуват още и подразбиращи се (inference rules) които Mаke създава в процеса на работа.
Зависимости: кога да се направи целта
Редовете с ":" в тях се наричат редове на зависимост(dependency lines). Те определят кога трябва да се направи целта(крайния файл) или дали е необдходимо да се направи наново ако има промяна в някой файл от който тя зависи.
project.exe : main.obj io.obj
В този ред става ясно, че project.exe зависи от main.obj и io.obj. За да определи кой файлове са променени Mаke проверява времето на промяна на всеки файл(т.н. timestamp), като започва от зависимостите. Ако main.obj или файловете от които той зависи са применени се задейства цялата последователност в дълбочина до произвеждането на main.obj и като краен резултат се опреснява и project.exe
Командни редове: Как да създадем ЦЕЛ(краен файл)
Врязаните редове(тези с отстъп от началото на реда) след реда със зависимости се приемат за командни редове(shell lines). Командните редове указват как Mаke да създаде крайния файл.
project.exe: main.obj io.obj
tlink c0s main.obj io.obj, project.exe,, cs /Lf:\bc\lib
Макроси
Дефиниране на макроси
Макросите са редове който се дефинират в Mаkefile по следния начин:
име = стойност
Името е единична дума, която е последствие ако бъде записана в следния формат ${name} или $(name) ще бъде подменена от стойност.
OBJS = main.obj io.obj
MODEL = s
CC = bcc
CFLAGS = –m$(MODEL)
project.exe : $(OBJS)
tlink c0$(MODEL) $(OBJS), project.exe,, c$(MODEL) /Lf:\bc\lib
main.obj : main.c
$(CC) $(CFLAGS) –c main.c
io.obj : io.c
$(CC) $(CFLAGS) –c io.c
$(OBJS) : incl.h
Макроси от команден ред
Макросите могат да се използват още при извикването на make от командния ред. Синтаксиса е следния:
make CFLAGS=–ms
При стартирането си маке ще има макрос с име CFLAGS и стойност –ms. Ако макроса има повече стойности, той трябва да е затворен с двойни кавички:
make "CFLAGS=–ms –z –p"
Run-Time Macros
TODO
Macro Modifiers
TODO
Filename Components
TODO
Tokenize
TODO
Other Modifiers
TODO
Inference Rules
TODO
Response Files
TODO
Automatic Response Files
TODO
Inline Response Files
TODO
Makefile Directives
TODO
Източници
- http://www.opussoftware.com/tutorial/TutMakefile.htm - превода е направен от този документ, без да се спазва абсолютна точност.

