Шаблон Makefile для общей библиотеки на C (с пояснениями)
Последнее обновление от 28 октября 2019 г.
tl;dr: Сохраните следующий файл как Makefile и измените исходные файлы на те, которые вы хотите.
# Создать шаблон файла для общей библиотеки на C # https://www.topbug.net/blog/2019/10/28/makefile-template-for-a-shared-library-in-c-with-explanations/CC = gcc # C-компилятор CFLAGS = -fPIC -Wall -Wextra -O2 -g # C -флаги LDFLAGS = -общие # флаги ссылок RM = rm -f # команда rm TARGET_LIB = libtarget.so # целевая библиотека SRCS = main.c src1.c src2.c # исходные файлы OBJS = $(SRCS:.c=.o).ФАЛЬШИВЫЙ: все все: ${TARGET_LIB} $(TARGET_LIB): $(OBJS) $(CC) ${LDFLAGS} -o $@ $^ $(SRCS:.c=.d):%.d:%.c $(CC) $(CFLAGS) -MM $< >$@ include $(SRCS:.c=.d).ФАЛЬШИВЫЙ: чистый чистый: -${RM} ${TARGET_LIB} ${OBJS} $(SRCS:.c=.d)
Приведенный выше фрагмент кода также доступен на GitHub gist.
Пояснение
Основной процесс: Для каждого исходного файла C (пример.c) компилятор C с помощью параметра -MM создает файл правил (пример.d). Файл правил описывает зависимости (например, заголовочные файлы) объектного файла (example.o), соответствующего исходному файлу C. Затем компилятор C компилирует каждый исходный файл C в объектный файл. Компоновщик связывает все объектные файлы в общую библиотеку.
Строки 4-8: команда компилятора, флаги компилятора, флаги компоновщика, команда удаления и имя целевой библиотеки, соответственно.
Строка 10: Список исходных файлов.
Строка 11: Объектные файлы., выводится из списка исходных файлов путем замены суффикса.c.o.
Строки 13-14: Цель all зависит от целевой библиотеки. Другими словами, при создании целевого объекта all, который используется по умолчанию при запуске make, будет создана целевая библиотека.
Строка 16: Целевая библиотека зависит от наличия всех объектных файлов.
Строка 17: Создайте целевую библиотеку ($@), применив указанную команду компилятора ($(CC)) с указанными флагами компоновщика ($(LDFLAGS)) ко всем объектным файлам ($^).
Строка 19: Для каждого исходного файла на C существует файл правил (*.d). Его имя определяется заменой суффикса.c.d.
Строка 20: Создайте каждый файл правил ($@), применив к соответствующему исходному файлу C ($<) указанную команду компилятора ($(CC)) с указанным флаги компилятора ($(CFLAGS)) и флаг -MM.
Строка 22: Включите файлы правил как часть Makefile.Строки 24-26: Цель очистки, которая удаляет все сгенерированные файлы (${TARGET_LIB}, ${OBJS}, $(SRCS:.c=.d)) с помощью команды удаления (${RM}). Это можно вызвать с помощью make clean.
Шаблон Makefile для общей библиотеки на C (с пояснениями) впервые появился в Top Bug Net.
Другие новости: