2013-03-04 6 views
11

je le makefile suivant jusqu'à présent en ce moment ...Comment rendre la bibliothèque statique dans 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 

Je suis en train de générer des bibliothèques statiques libparser.a et libshell.a

Je ne idée de créer ces bibliothèques statiques ...

+0

http://www.adp-gmbh.ch/cpp/gcc/create_lib.html –

Répondre

9

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

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

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

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

+0

n'est-ce pas supposé être '-rcs' au lieu de simplement' rcs'? – deddebme

Questions connexes