Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

 gcc -с 2.с

3.o: 3.c b.h c.h

 gcc -с 3.c

Запустите команду

make
с опцией
– f
, потому что ваш make-файл не назван одним из стандартных имен makefile или Makefile. Если запустить приведенный код в каталоге, не содержащем исходных файлов, будет получено следующее сообщение:

$ make -f Makefile1

make: *** No rule to make target 'main.c', needed by 'main.o'. Stop.

$

Команда

make
предположила, что первое задание в make-файле,
myapp
, — это файл, который вы хотите создать. Затем она просмотрела остальные зависимости и прежде всего определила, что нужен файл, названный main.c. Поскольку вы все еще не создали этот файл и в make-файле не сказано, как он может быть создан, команда
make
вывела сообщение об ошибке. Итак, создайте исходные файлы и попробуйте снова. Поскольку результат нас не интересует, эти файлы могут быть очень простыми. Заголовочные файлы на самом деле пустые, поэтому вы можете создать их командой
touch
:

$ touch a.h

$ touch b.h

$ touch c.h

Файл main.c содержит функцию

main
, вызывающую функции
function_two
и
function_three
. В других двух файлах определены функции
function_two
и
function_three
. В исходных файлах есть строки
#include
для соответствующих заголовочных файлов, поэтому они оказываются зависимыми от содержимого включенных файлов заголовков. Это приложение не назовешь выдающимся, но, тем не менее, далее приведены листинги программ:

/* main.c */

#include <stdlib.h>

#include "a.h"

extern void function_two;

extern void function_three;

int main {

 function_two;

 function_three;

 exit(EXIT_SUCCESS);

}

/* 2.c */

#include "a.h"

#include "b.h"

void function_two { }

/* 3.с */

#include "b.h"

#include "c.h"

void function_three { }

Теперь попробуйте выполнить команду make еще раз:

$ make -f Makefile1

gcc -с main.с gcc -с 2.с

gcc -с 3.с

gcc -о myapp main.о 2.о 3.о

$

На этот раз сборка прошла успешно.

Как это работает

Команда

make
обработала секцию зависимостей make-файла и определила файлы, которые нужно создать, и порядок их создания. Хотя вы сначала описали, как создать файл myapp, команда
make
определила правильный порядок создания файлов. Затем она запустила соответствующие команды для создания этих файлов, приведенные вами в секции правил. Команда
make
выводит на экран выполняемые ею команды. Теперь вы можете протестировать ваш make-файл, чтобы увидеть, корректно ли он обрабатывает изменения в файле b.h:

$ touch b.h

$ make -f Makefile1

gcc -c 2.с gcc -с 3.c

gcc -o myapp main.о 2.о 3.o

$

Команда

make
прочла ваш make-файл, определивший минимальное количество команд, требуемых для повторного построения myapp, и выполнила их в правильной последовательности. Теперь посмотрите, что произойдет, если вы удалите объектный файл:

$ rm 2.o

$ make -f Makefile1

gcc -с 2.c

gcc -о myapp main.о 2.о 3.о

$

И снова команда

make
правильно определяет нужные действия.

Комментарии в make-файле

Комментарий в make-файле начинается со знака

#
и продолжается до конца строки. Как и в исходных файлах на языке С, комментарии в make-файлах могут помочь как автору, так и другим пользователям понять, что имелось в виду во время написания данного файла.Sta

Макросы в make-файле

Даже если бы функциональные возможности команды

make
и make-файлов ограничивались тем, что уже описано, они были бы мощным средством управления проектами с множеством исходных файлов. Но эти средства становятся громоздкими и неповоротливыми в проектах, содержащих большое количество файлов. Поэтому make-файлы предоставляют возможность использовать макросы, позволяющие писать эти файлы в более обобщенном виде.

Макросы в make-файле записываются в виде конструкции

MAСRONAME=значение
, затем ссылаться на значение можно, указав
$(MACRONAME)
или
${MACRONAME}
. Некоторые версии
make
могут также принимать
$MACRONAME
. Вы можете задать пустое значение макроса, оставив пустой часть строки после знака
=
.

Макросы часто используют в make-файлах для задания опций компилятора. Обычно во время разработки приложение компилируется без оптимизации и с включенной отладочной информацией. Для окончательной версии приложения, как правило, нужны другие режимы: маленький двоичный файл без какой-либо отладочной информации, работающий как можно быстрее.

Еще одна проблема в файле Makefile1 — жестко заданное имя компилятора

gcc
. В других UNIX-системах вы, возможно, будете использовать
cc
или
c89
. Если когда-нибудь вы захотите перенести ваш make-файл в другую версию UNIX или получите другой компилятор для имеющейся у вас системы, придется изменить несколько строк в вашем make-файле, чтобы заставить его работать. Макросы — хороший способ собрать все эти системнозависимые части и легко изменить их.

Поделиться:
Популярные книги

Наследие Маозари 7

Панежин Евгений
7. Наследие Маозари
Фантастика:
боевая фантастика
юмористическое фэнтези
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 7

Очерки времен и событий из истории российских евреев. 1945 – 1970 гг. Книга 6

Кандель Феликс Соломонович
Научно-образовательная:
история
5.00
рейтинг книги
Очерки времен и событий из истории российских евреев. 1945 – 1970 гг. Книга 6

Кукловод

Злобин Михаил
2. О чем молчат могилы
Фантастика:
боевая фантастика
8.50
рейтинг книги
Кукловод

Сталин

Радзинский Эдвард Станиславович
3. Загадки жизни и смерти
Проза:
историческая проза
7.36
рейтинг книги
Сталин

Изгои

Владимиров Денис
5. Глэрд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Изгои

Хозяин Стужи

Петров Максим Николаевич
1. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Хозяин Стужи

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Руководство по системной поведенченской психотерапии

Курпатов Андрей Владимирович
Научно-образовательная:
психотерапия и консультирование
5.00
рейтинг книги
Руководство по системной поведенченской психотерапии

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Неучтенный элемент. Том 11

NikL
11. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 11

Газлайтер. Том 39

Володин Григорий Григорьевич
39. История Телепата
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 39

Ваше Сиятельство 8

Моури Эрли
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 8

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.33
рейтинг книги
Точка Бифуркации