Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$ <b>touch b.h</b>
$ <b>make -f Makefile1</b>
gcc -c 2.с gcc -с 3.c
gcc -o myapp main.о 2.о 3.o
$
Команда
make
$ <b>rm 2.o</b>
$ <b>make -f Makefile1</b>
gcc -с 2.c
gcc -о myapp main.о 2.о 3.о
$
И снова команда
make
Комментарии в make-файле
Комментарий в make-файле начинается со знака
#
Макросы в make-файле
Даже если бы функциональные возможности команды
make
Макросы в make-файле записываются в виде конструкции
MAСRONAME=<i>значение</i>
$(MACRONAME)
${MACRONAME}
make
$MACRONAME
=
Макросы часто используют в make-файлах для задания опций компилятора. Обычно во время разработки приложение компилируется без оптимизации и с включенной отладочной информацией. Для окончательной версии приложения, как правило, нужны другие режимы: маленький двоичный файл без какой-либо отладочной информации, работающий как можно быстрее.
Еще одна проблема в файле Makefile1 — жестко заданное имя компилятора
gcc
cc
c89
Обычно макросы определяются в самом make-файле, но их можно задать и при вызове команды
make
make CC=c89
"CC = с89"
Выполните упражнение 9.2.
Далее приведена переработанная версия make-файла с именем Makefile2, в которой применяются макросы:
all: myapp
# Какой компилятор
СС = gcc
# Где хранятся файлы include
INCLUDE = .
# Опции для процесса разработки
СFLAGS = -g -Wall -ansi
# Опции для окончательной версии
# СFLAGS = -О -Wall -ansi
myapp: main.о 2.o 3.o
$(CC) -о myapp main.о 2.o 3.o
main.о: main.c a.h
$(CC) -I$(INCLUDE) $(CFLAGS) -с main.c
2.о: 2.c a.h b.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
3.o: 3.c b.h c.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
Если удалить прошлую версию приложения и создать новую с помощью только что приведенного нового make-файла, вы получите следующее:
$ <b>rm *.о myapp</b>
$ <b>make -f Makefile2</b>
gcc -I. -g -Wall -ansi -c main.c
gcc -I. -g -Wall -ansi -c 2.c
gcc -I. -g -Wall -ansi -c 3.c
gcc -o myapp main.о 2.o 3.o
$
Как это работает
Программа make заменяет ссылки на макросы
$(CC)
$(CFLAGS)
$(INCLUDE)
#define
У команды
make
Таблица 9.1
Макрос | Определение |
---|---|
$? | Список необходимых условий (файлов, от которых зависит выходной файл), измененных позже, чем текущий выходной файл |
[email protected] | Имя текущего задания |
$< | Имя текущего файла, от которого зависит выходной |
$* | Имя без суффикса текущего файла, от которого зависит выходной |