首页 > 解决方案 > 如何使用 makefile 编译静态库

问题描述

我想在 linux 中使用 Makefile 创建一个静态库。

我想知道这个makefile是否真实?我对其他想法持开放态度。谢谢大家。

NAME= libamqp.a
CC := gcc
CFLAGS := -c -Wall -g
SRCDIR := src
OBJDIR := obj
#definition des fichiers headers
INCLUDES := -I/usr/local/include/ -I/home/tvi/projets/RabbitMQ/libamqp/dlo -I/home/tvi/projets/RabbitMQ/rabbitmq-c/librabbitmq 
#definition des librairies
LFLAGS := -L/usr/local/lib64
LDFLAGS :=
LIBS := -L. -lrabbitmq
SRCS_RAW := amqp_connexion.c amqp_consommateur.c amqp_deconnexion.c amqp_producteur.c amqp_outils.c

SRCS := $(addprefix $(SRCDIR)/,$(SRCS_RAW))
OBJS := $(addprefix $(OBJDIR)/,$(SRCS_RAW:.c=.o))


.PHONY: all
all: $(NAME)
    @echo "$(MAKE) : Tout est généré"

$(NAME):$(OBJS)
    $(CC) $(CFLAGS) $(SRCS) $(INCLUDES) $(LFLAGS) $(LIBS)
    ar rcs $(NAME) $(OBJS) 
    ranlib $(NAME)


$(OBJS): $(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
    $(CC) $(CFLAGS)  -c $< -o $@ $(INCLUDES)
    
.PHONY: clean
clean:
    $(RM) *~  $(NAME)
    $(RM) -r  $(OBJDIR)

标签: cmakefilestatic-libraries

解决方案


NAME= libamqp.a
CC := gcc
CFLAGS := -Wall -g
SRCDIR := src
OBJDIR := obj
#definition des fichiers headers
INCLUDES := -I/usr/local/include/ -I/home/tvi/projets/RabbitMQ/libamqp/dlo -I/home/tvi/projets/RabbitMQ/rabbitmq-c/librabbitmq 
#definition des librairies
LFLAGS := -L/usr/local/lib64
LDFLAGS :=
LIBS := -L. -lrabbitmq
SRCS_RAW := amqp_connexion.c amqp_consommateur.c amqp_deconnexion.c amqp_producteur.c amqp_outils.c

SRCS := $(addprefix $(SRCDIR)/,$(SRCS_RAW))
OBJS := $(addprefix $(OBJDIR)/,$(SRCS_RAW:.c=.o))

#$(info DEBUG: SRCS=$(SRCS))
#$(info DEBUG: OBJS=$(OBJS))
#$(info DEBUG: EXEC=$(EXEC))

.PHONY: all
all: $(NAME)
    @echo "$(MAKE) : Tout est genere"

$(NAME):$(OBJS)
    ar rcs $(NAME) $(OBJS) 
    ranlib $(NAME)

#règle pour créer un répertoire d'objets s'il n'existe pas
$(OBJDIR):
    mkdir $(OBJDIR)

#définir une règle implicite pour créer des objets dans leur propre répertoire
#(note - ordre uniquement la dépendance sur le répertoire d'objets)
#$< :premier_dependance $@:cible 
$(OBJS): $(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
    $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ 
    
.PHONY: clean
clean:
    $(RM) *~  $(NAME)
    $(RM) -r  $(OBJDIR)

推荐阅读