Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
myapp: main:о 2.о 3.o
main.о: main.c a.h
2.о: 2.с a.h b.h
3.o: 3.c b.h c.h
Список свидетельствует о том, что myapp зависит от main.о, 2.o и 3.o, a main.o зависит от main.c и a.h и т. д.
Данный набор зависимостей формирует иерархию, показывающую, как исходные файлы связаны друг с другом. Вы легко можете увидеть, что если изменяется b.h, то придется пересмотреть 2.o и 3.o, а поскольку 2.o и 3.o будут изменены, вам придется перестроить и myapp.
Если вы хотите собрать несколько файлов, можно использовать фиктивную цель или задание
all
all: myapp myapp.1
И еще раз, если вы не включите задание
all
make
Второй, компонент make-файла — правила или инструкции, описывающие способ создания выходного файла задания. В примере из предыдущего раздела какую команду следует применить после того, как команда
make
gcc -с 2.с
make
В данный момент мы должны информировать вас об очень странной и неудачной синтаксической записи, применяемой в make-файлах: разнице между пробелом и табуляцией. Все правила должны представлять собой строки, начинающиеся со знака табуляции; пробел не годится. Так как несколько пробелов и табуляция выглядят почти одинаково и поскольку почти во всех других случаях, касающихся программирования в системе Linux, нет большой разницы между пробелами и табуляциями, это может вызвать проблемы. Кроме того, пробел в конце строки в make-файле может вызвать сбой при выполнении команды
make
make
А теперь выполните упражнение 9.1.
Большинство правил или инструкций состоит из простой команды, которая могла бы быть набрана в командной строке. Для примера создайте свой первый 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
$ <b>make -f Makefile1</b>
make: *** No rule to make target 'main.c', needed by 'main.o'. Stop.
$
Команда
make
myapp
make
touch
$ <b>touch a.h</b>
$ <b>touch b.h</b>
$ <b>touch c.h</b>
Файл 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 еще раз:
$ <b>make -f Makefile1</b>
gcc -с main.с gcc -с 2.с
gcc -с 3.с
gcc -о myapp main.о 2.о 3.о
$
На этот раз сборка прошла успешно.
Как это работает
Команда
make
make
make