Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:
Примечание

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

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

А теперь выполните упражнение 9.1.

Упражнение 9.1. Простой make-файл

Большинство правил или инструкций состоит из простой команды, которая могла бы быть набрана в командной строке. Для примера создайте свой первый make-файл Makefile1:

myapp: main.о 2.o 3.o

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

main.о: main.c a.h

 gcc -с main.c

2.о: 2.с a.h b.h

 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:

  • Читать дальше
  • 1
  • ...
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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