У вас, вероятно, появился вопрос: можно ли не компилировать файлы проекта kalkul2 по отдельности,
а собрать сразу всю программу одной командой? Можно.
gcc calculate.c main.c -o kalkul -lm
Вы скажете, что это удобно? Удобно для нашей программы, потому что она состоит всего из двух c-файлов.
Однако профессиональная программа может состоять из нескольких десятков таких файлов.
Каждый раз набирать названия их всех в одной строке было бы делом чрезмерно утомительным.
Но есть возможность решить эту проблему.
Названия всех исходных файлов и все команды для сборки программы можно поместить в отдельный текстовый файл.
А потом считывать их оттуда одной короткой командой.
Давайте создадим такой текстовый файл и воспользуемся им.
В каталоге проекта kalkul2 удалите все файлы, кроме исходных calculate.h, calculate.c, main.c.
Затем создайте в этом же каталоге новый файл, назовите его makefile (без расширений). Поместите туда следующий текст.
kalkul: calculate.o main.o
gcc calculate.o main.o -o kalkul -lm
calculate.o: calculate.c calculate.h
gcc -c calculate.c
main.o: main.c calculate.h
gcc -c main.c
clean:
rm -f kalkul calculate.o main.o
install:
cp kalkul /usr/local/bin/kalkul
uninstall:
rm -f /usr/local/bin/kalkul
Обратите внимание на строки, введённые с отступом от левого края.
Этот отступ получен с помощью клавиши Tab. Только так его и надо делать!
Если будете использовать клавишу «Пробел», команды не будут исполняться.
Затем дадим команду, состоящую всего из одного слова:
make
И сразу же в нашем проекте появляются и объектные файлы и исполняемый.
Программа make как раз и предназначена для интерпретации команд, находящихся в файле со стандартным названием Makefile.
Рассмотрим его структуру.
Makefile является списком правил. Каждое правило начинается с указателя, называемого «Цель».
После него стоит двоеточие, а далее через пробел указываются зависимости. В нашем случае ясно, что конечный файл
kalkul зависит от объектных файлов calculate.o и main.o. Поэтому они должны быть собраны прежде сборки kalkul.
После зависимостей пишутся команды. Каждая команда должна находиться на отдельной строке, и отделяться от начала
строки клавишей Tab.
Структура правила Makefile может быть очень сложной. Там могут присутствовать переменные, конструкции ветвления, цикла.
Этот вопрос требует отдельного подробного изучения.
Если мы посмотрим на три первых правила, то они нам хорошо понятны. Там те же самые команды, которыми мы уже пользовались.
А что же означают правила clean, install и uninstall?
В правиле clean стоит команда rm, удаляющая исполняемый и объектные файлы. Флаг -f означает, что, если удаляемый
файл отсутствует, программа должна это проигнорировать, не выдавая никаких сообщений. Итак, правило clean
предназначено для «очистки» проекта, приведения его к такому состоянию, в каком он был до команды make.
Запустите
make
Появились объектные файлы и исполняемый. Теперь
make clean
Объектные и исполняемый файлы исчезли. Остались только c-файлы, h-файл и сам Makefile.
То есть, проект «очистился» от результатов команды make.
Правило install помещает исполняемый файл в каталог /usr/local/bin – стандартный каталог размещения
пользовательских программ.
Это значит, что её можно будет вызывать из любого места простым набором её имени. Но помещать что-либо в этот
каталог можно только, зайдя в систему под «суперпользователем». Для этого надо дать команду su и
набрать пароль «суперпользователя». В противном случае система укажет, что вам отказано в доступе.
Выход из «суперпользователя» осуществляется командой exit.
Итак,
make
su
make install
exit
Теперь вы можете запустить это программу просто, введя имя программы, без прописывания пути.
kalkul
Можете открыть каталог /usr/local/bin. Там должен появиться файл с названием kalkul.
Давайте теперь «уберём за собой», не будем засорять систему.
su
make uninstall
exit
Посмотрите каталог /usr/local/bin. Файл kalkul исчез. Итак, правило uninstall удаляет программу из системного каталога.