четверг, 6 января 2011 г.

Команда make и Makefile

Команда make.

Предположим нам нужно сделать исполняемый файл programma из исходниых файлов main.cpp function.cpp и заголовочного function.h. Создадим файл makefile в той же директории где находяться выше перечисленные файлы.

vitaliy@fox:~/$ nano makefile
programma : main.o function.o
                    g++ -o programma main.o function.o

main.o : main.cpp function.h
             g++ -c main.cpp

function.o : function.cpp function.h
                g++ -c function.cpp

clean : 
           rm programma main.o function.o

makefile состоит из четырех частей каждая из честей строиться по следующему принципу:

цель : предпосылка
          команда

цель - это обычно файл который генерирует программа make.
предпосылка- это файл который используеться как вход для создания цели от этих файлов
                        зависит цель.
команда- это действие которое выполняет make.
  
Предпосылок может быть несколько.
В примере выше clean необходим в будущем для удаление программы, а именно файлов programma main.o function.o.  

Теперь для создания исполняемого файла выполним команду make:
vitaliy@fox:~/$  make
g++ -c main.cpp
g++ -c function.cpp
g++ -o programma main.o function.o

Для удаления данных выполнить make clean:
vitaliy@fox:~/$  make clean
rm programma main.o function.o

!!! Очень полезная функция программы make, заключаеться в том что она может обнавлять файлы. В случае если один из файлов-предпосылок был изменен программа make выполнинт команду для всех целей где указан этот файл-предпосылка. К примеру вы изменили что-то в исходном файле function.cpp, теперь еслы вы выполните повторно команду make она проверит время редактирования всех файлов-предпосылок и сравнит со значениями в своей базе с момента последнего выполнения команды make. В тех случаях где файйл-предпосылка изменен  make повторно выполнит соответствущие команды. В нашем случае make выполнит команду 
g++ -c function.cp
Если бы был изменен файл function.h ,были бы выполнины команды во  всех секциях где есть этот файл, а именно:
g++ -c main.cpp
g++ -c function.cpp



Можно также расширить возможность установки добавив цели install и uninstall :
vitaliy@fox:~/$ nano makefile
programma : main.o function.o
          g++ -o programma main.o function.o

main.o : main.cpp function.h
          g++ -c main.cpp

function.o : function.cpp function.h
          g++ -c function.cpp

clean : 
          rm programma main.o function.o

install : 
         cp programma /usr/sbin/programma

uninstall : 
         rm -f /usr/sbin/programma 

Теперь после того как Вы выполнили команду make,  выполните из под рута команду make install для установки(копирования) исполняемого файла в директорию  /usr/sbin/
root@fox:/home/vitaliy# make install


Для удаления исполняемого файла из дериктории /usr/sbin/ 
root@fox:/home/vitaliy# make uninstall

Комментариев нет:

Отправить комментарий