2013-03-04 3 views
11

я до сих пор прямо сейчас следующий 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

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

+0

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

ответ

9

Вы можете создать статические библиотеки с 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].

+0

разве это не '-rcs', а не просто' rcs'? – deddebme

Смежные вопросы