Прежде всего я хочу рассказать о том, для чего создают Makefile. Если вы программировали для Windows и у вас не очень много опыта, то скорее всего вы и не слышали о таком файле=) Ведь графические IDE настолько смазали процесс создания этого файла, что программист зачастую его и не замечает. В любом случае неплохо знать «как и что происходит»…
Makefile — чаще всего служит для обеспечения переносимости приложения. При создании кроссплатформенного ПО необходимо компилировать одни и теже (или различные) исходники разными компиляторами на разных операционных системах и т.д. Для упрощения данной задачи составляют Makefile.
Makefile имеет следующую структуру:
имя-результата: исходные-имена …
команды
…
…
- Имя-результата — как правило имя генерируемого файла. Результатом также может быть цель, например «clean» — очистка.
- Исходное-имя — имя файла используемого на входе, для создания конечного результата. Как правило это и есть имена исходников.
- Команда — действие которое выполниться если какой либо файл из списка «исходные-имена» изменился.
Стандартные правила:
- all — основная задача — компиляция программы
- install — копировать исполняемые файла для последующего использования.
- uninstall — удаление компонентов программы из системы.
- clean — удаление из папки проекта всех временных и вспомогательных файлов.
Пример простейшего Makefile`а :
CC = g++
CFLAGS = -Wall
all: hello
hello: hello.o
hello.o: hello.cpp
clean:
rm -f hello hello.o
В начале оприделены стандартные константы:
- СС — имя программы компилятора.
- CFLAGS — определяет параметры командной строки при обращении к компилятору. -Wall — разрешает выводить все замечания по исходному коду.
Правила сборки в примере были заданы неявно. Их можно определить также явно:
hello.o: hello.cpp
$(CC) $(CFLAGS) -c -o hello.o hello.cpp
Именно таким образом происходит построение makefile`a. На этом всё;)