11

到目前为止,我有以下生成文件......

# 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

我正在尝试生成静态库 libparser.a 和 libshel​​l.a

我不知道如何创建这些静态库...

4

1 回答 1

9

ar您可以使用以下命令创建静态库:

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

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

如果您的ar命令不理解该s选项,则您还必须ranlib在生成的.a文件上运行ar。在这种情况下,替换ar rcs $@ $^ar rc $@ $^ && ranlib $@

于 2013-03-04T08:04:54.570 回答