Comment créer une bibliothèque statique dans makefile

J’ai maintenant le fichier makefile suivant …

# 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 $@ $< #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 

J’essaie de générer des bibliothèques statiques libparser.a et libshell.a

Je ne sais pas comment créer ces bibliothèques statiques …

Vous créez des bibliothèques statiques avec la commande ar :

 lib/libparser.a: $(OBJECT_FILES_FOR_LIBPARSER) ar rcs $@ $^ lib/libshell.a: $(OBJECT_FILES_FOR_LIBSHELL) ar rcs $@ $^ 

Si votre commande ar ne comprend pas l’option s , vous devrez également exécuter ranlib sur le fichier .a produit par ar . Dans ce cas, remplacez ar rcs $@ $^ par ar rc $@ $^ && ranlib $@ .