Как сделать статическую библиотеку в makefile

У меня есть следующий файл makefile до сих пор...

# Beginning of Makefile

OBJS = obj/shutil.o obj/parser.o obj/sshell.o
HEADER_FILES = include/shell.h include/parser.h
STATLIB = lib/libparser.a lib/libshell.a
EXECUTABLE = sshell
CFLAGS = -Wall
CC = gcc
# End of configuration options

#What needs to be built to make all files and dependencies
all: $(EXECUTABLE) $(STATLIB)

#Create the main executable
$(EXECUTABLE): $(OBJS)
        $(CC) -o $(EXECUTABLE) $(OBJS)

$(STATLIB): $(
#Recursively build object files
obj/%.o: src/%.c
        $(CC) $(CFLAGS) -I./include  -c -o [email protected] $<


#Define dependencies for objects based on header files
#We are overly conservative here, parser.o should depend on parser.h only
$(OBJS) : $(HEADER_FILES)

clean:
        -rm -f $(EXECUTABLE) obj/*.o
        -rm -f lib/*.a

run: $(EXECUTABLE)
        ./$(EXECUTABLE)

tarball:
        -rm -f $(EXECUTABLE) *.o
        (cd .. ; tar czf Your_Name_a1.tar.z shell )

# End of Makefile

Я пытаюсь создать статические библиотеки libparser.a и libshell.a

Я понятия не имею, как создавать эти статические библиотеки...

Ответ 1

Вы создаете статические библиотеки с помощью команды ar:

lib/libparser.a: $(OBJECT_FILES_FOR_LIBPARSER)
        ar rcs [email protected] $^

lib/libshell.a: $(OBJECT_FILES_FOR_LIBSHELL)
        ar rcs [email protected] $^

Если ваша команда ar не понимает параметр s, вам нужно будет запустить ranlib в файле .a, создаваемом ar. В этом случае замените ar rcs [email protected] $^ на ar rc [email protected] $^ && ranlib [email protected].