web-dev-qa-db-ja.com

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


#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を生成しようとしています

これらの静的ライブラリを作成する方法がわかりません...

11
Anthony Ku

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 $@に置き換えます。

9
Idelic