Програмирование

Linux

Сети

Базы данных

Сылки

Проекты

Утилита make

Стандартный makefike

iEdit: main.o Editor.o TextLine.o
     gcc $^ -o $@
.cpp.o:
     gcc -c $<
main.o: main.h Editor.h TextLine.o
Editor.o: Fditor.h TextLine.h
TextLine.o: TextLine.h

Первое правило заставляет перекомпилироваться программу при изменении любого исходного файла.

Второе говорит, какой объектный файл зависит от каких исходников.


Далее идет модифицированный файл определяющий автоматически исходные файлы:

IEdit: $(patsubst %.cpp, %.o, $(wildcard *.cpp))
     gcc $^ -o $@
%.o: %.cpp
     gcc -c $<
main.o: main.h Editor.h TextLine.h
Editor.o: Editor.o TextLine.h
TextLine.o: TextLine.h

Следующий пример производит автоматическое определение зависимостей от исходных файлов:

IEdit: $(patsubst %.cpp, %.o, $(wildcard *.cpp))
     gcc $^ -o $@
%.o: %.cpp
     gcc -c -MD $<
include $(wildcard *.d)

Следующий пример makefile показывает что проект будет собираться из разных директорий, т. е. исходные файлы лежат в текущем директории и в поддиректориях:

#перечислить директории и поддиректории
source_dirs:= . Editor TextLine
search_wildcards:= $(addsuffix /*.cpp, $(source_dirs))
iEdit: $(notdir $(patsubst %.cpp, %.o, $(wildcard $(search_wildcards))))
     gcc $^ -o $@
VPATH:= $(source_dirs)
%.o: %.cpp
     gcc -c -MD $(addprefix -I, $(source_dirs))$<
include $(wildcard *.d)

Компиляция:

-I/usr/include/name - name без расширения файла инклюда .h Эта опция задает место положения индлюд файла.

-l/usr/lib/name -без расширения. Эта опция заставляет прилинковать определенную библиотеку.


2005г.rz6hpi@yandex.ru
Hosted by uCoz