#c #makefile
#c #makefile
Вопрос:
Как создать файл make для запуска, например, синтаксического анализатора xml со следующей командой командной строки
gcc source.c -I/usr/include/libxml2 -lxml2 -o output
Я использую это для включения libxml при компиляции с использованием командной строки.
Как бы это было сделано с использованием файла make вместо использования командной строки?
Ответ №1:
SOURCES:=source.c
OBJECTS:=$(SOURCES:%.c=%.o)
CC=gcc
CFLAGS=-g -Wall -I/usr/include/libxml2
LD=gcc
LDFLAGS=
LIBS=-lxml2
TARGET:=output
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LD) -o $@ $(OBJECTS) $(LDFLAGS) $(LIBS)
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
depend:
$(CC) $(CFLAGS) -MM $(SOURCES) > .depend
clean:
rm -f $(OBJECTS) $(TARGET)
.depend: depend
include .depend
Вы можете использовать это как шаблон, затем добавлять / изменять исходные файлы, TARGET, CFLAGS, LDFLAGS и библиотеки. Для файлов Make требуются табуляции для отступов, поэтому вам нужно будет исправить пробелы, если вы скопируете и вставите это.
Комментарии:
1. Обратите внимание, что командные строки (строки $ (CC) и $(LD)) должны начинаться с символа табуляции, а не с пробелов.
2. @Helium3: Активирует большинство предупреждений компилятора — вам следует сделать это привычкой, это расскажет вам о множестве распространенных проблем.
3. Здесь простой вопрос. Что за файл является make-файлом? просто обычный файл .c?
4. Также. это 1 вкладка или две перед, например, $ (LD)?
5. @Helium3: makefile — это просто обычный текстовый файл. Строка, начинающаяся с табуляции, интерпретируется как команда; все, что находится после первой табуляции, передается командной оболочке (после замены переменной и исключения небольшого количества управляющих символов в начале команды, таких как @, -, ).
Ответ №2:
В самом простом виде:
output: source.c
gcc source.c -I/usr/include/libxml2 -lxml2 -o output
теперь вы можете произнести либо make output
of make
, либо получить output
build.
Ответ №3:
Если вы позволите себе, чтобы выходной файл имел то же имя, что и исходный (без суффикса .c), вы можете просто сделать:
CPPFLAGS = -I/usr/include/libxml2 LDFLAGS = -lxml2
Используя только эти две строки в вашем makefile,
создать исходный код
будет выполнен поиск source.c и сгенерирован исполняемый файл с именем ‘source’ с соответствующими флагами.