АЛ
Артём Леонтьев

Как скомпилировать makefile в Ubuntu?

Доброго времени суток, уважаемые пользователи.

Есть необходимость научиться работать с makefile. Нашел вот такой мануал: http://www.linux.org.ru/books/GNU/Gmake.htm . Но мне непонятно как запустить созданный код и как его потом вызывать из консоли? Есть, предположим, такой код для makefile:

CFLAGS=-Wall -g

clean:
rm -f ex1

Есть каталог /l/ex1, в нем и лежат /l/ex1/ex1.c и /l/ex1/ex1. Как мне скомпилить makefile и как потом при такой адресации к нему обращаться, чтобы выполнять clean?

Просьба дать детальный ответ ибо раньше с линуксом особо дел не имел, а с make тем более. Спасибо 🙂

Светлана Царева
Светлана Царева

all: ex1

ex1: ex1.o
${CC} -o $@ $^ ${CFLAGS}

%.o: %.c
$(CC) -c -o $@ $^ ${CFLAGS}

clean:
rm -rf ex1 *.o

Базовый Makefile
all: - умолчальная цель, после двоеточия перечисляем все зависимости (т. е. в данной цели - все, что должно собираться по умолчанию)
ex1: - цель ex1 (в данном случае цель одна и make без параметров - это тоже самое, что и make ex1)
данная цель зависит от объектного кода ex1.o
Стоит не забывать, что строки, относящиеся к какой либо цели должны обязательно начинаться с табуляции. т. е. в строке ${CC} -o $@ $^ ${CFLAGS} первым символом должна быть табуляция.
%.o: %.c: шаблон компиляции любых С файлов, с этой целью не надо перечислять все файлы по одному, make сам разберется, что компилить, изходя из зависимостей.
$@ тут - макрос, перечисляющий все цели, $^ - макрос, перечисляющий зависмости зависимости.
в данном случае, объектный код зависит от непосредственно C файлов.
Данный Makefile легко масштабируется для сборки целей с множеством исходных файлов, необходимо всего лишь указать зависимости, т. е. если в код ex1 добавится файл ex2.c, всего лишь добавляем его в зависимости ex1 - ex1: ex1.o ex2.o
Сборка:
Собрать все - make, make all
Собрать цель ex1 - make ex1
Чистка - make clean
собственно все.

Похожие вопросы
Как скомпилировать cpp в dll?
Ubuntu. Можно ли удалить из ubuntu 12.10 программу python?
зачем надо ставить ubuntu
Видеоадаптер в ubuntu
Где скачать исходники Ubuntu и как скомпилировать их на Windows?
Что лучше на ваш взгляд, Ubuntu 12.04 LTS или Ubuntu 13.04?
Что лучше Ubuntu или Kubuntu?
Ubuntu разница между..
python ubuntu gedit как сомпилировать файл python в gedit скомпилировать чтобы был знначок программы
Ubuntu При удаление Ubuntu Grub удалится и останется биос?