Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ALTERAR MAKEFILE ATUAL E CRIAR MAKEFILE ESPECÍFICO PARA LIB ESTATICA

CRIEI O PROGRAMA_A QUE RODA NUMA MV LINUX UBUNTU, COM O MAKEFILE ABAIXO:

CC = gcc
CFLAGS += -Wall -Iheader
CFLAGS +=-I/usr/include/openssl   # Add the path to OpenSSL headers here
CFLAGS += -DBUILD_DATE=\"$(shell date +'%Y%m%d%H%M%S')\"
LDFLAGS = -lcurl -lcjson -lssl -lcrypto

SRC_DIR = source
OBJ_DIR = obj
BIN_DIR = bin

SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
EXECUTABLE = $(BIN_DIR)/PROGRAMA_A

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ)
    $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -rf $(OBJ_DIR)/*.o $(EXECUTABLE)

.PHONY: all clean

O MAKEFILE ESTÁ NUM DIRETÓRIO DE NOME A, QUE POSSUI OS 4 SUB-DIRETÓRIOS: source; header; obj; bin

TENHO QUE CRIAR UM NOVO PROGRAMA, QUE IRA UTILIZAR DIVERSOS FONTES DO PROGRAMA_A, SÓ QUE, ANTES DE CRIÁ-LO, GOSTARIA DE ALTERAR ESTE MAKEFILE PARA UTILIZAR UMA BIBLIOTECA L.a QUE PRETENDO CRIAR MOVENDO OS FONTES COMUNS AOS DOIS PROGRAMAS PARA UMA PASTA DE NOME L (NO MESMO NÍVEL DE A), E VINCULAR ESTATICAMENTE L.a AO PROGRAMA_A. PODERIAM ME INFORMAR QUAIS MUDANÇAS DEVO FAZER NO MAKEFILE ATUAL, BEM COMO O MAKEFILE ESPECÍFICO DE L.a? GRATO

1 resposta
solução!

Olá, Guilherme!

Que interessante o seu projeto! Vamos lá, vou tentar te ajudar a ajustar o seu Makefile atual e criar um novo para a biblioteca estática L.a.

Alterações no Makefile do PROGRAMA_A

  1. Mover fontes comuns para a pasta L: Primeiro, você precisa mover os arquivos .c que serão usados tanto pelo PROGRAMA_A quanto por outros programas para o diretório L.

  2. Atualizar o Makefile para usar L.a: Você precisará adicionar a biblioteca estática L.a ao seu Makefile. Vou te mostrar como fazer isso.

CC = gcc
CFLAGS += -Wall -Iheader -IL/include  # Inclua o caminho para os headers da biblioteca L
CFLAGS += -I/usr/include/openssl
CFLAGS += -DBUILD_DATE=\"$(shell date +'%Y%m%d%H%M%S')\"
LDFLAGS = -lcurl -lcjson -lssl -lcrypto -L./L -lL  # Adicione a biblioteca L.a

SRC_DIR = source
OBJ_DIR = obj
BIN_DIR = bin

SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
EXECUTABLE = $(BIN_DIR)/PROGRAMA_A

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ) L/libL.a  # Adicione a dependência da biblioteca
    $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -rf $(OBJ_DIR)/*.o $(EXECUTABLE)

.PHONY: all clean

Makefile para compilar a biblioteca estática L.a

Agora, vamos criar um Makefile para a biblioteca L.a no diretório L.

CC = gcc
CFLAGS = -Wall -Iinclude  # Assumindo que os headers estão em L/include

SRC_DIR = src
OBJ_DIR = obj
LIB_DIR = .

SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
LIBRARY = $(LIB_DIR)/libL.a

all: $(LIBRARY)

$(LIBRARY): $(OBJ)
    ar rcs $@ $^

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -rf $(OBJ_DIR)/*.o $(LIBRARY)

.PHONY: all clean

Estrutura de Diretórios

  • L/src: Coloque aqui os arquivos .c comuns.
  • L/include: Coloque aqui os arquivos .h comuns.
  • L/obj: Diretório para os objetos compilados da biblioteca.
  • L/libL.a: Biblioteca estática que será gerada.

Espero que essas instruções te ajudem a configurar os Makefiles conforme suas necessidades. Bons estudos e sucesso com seu projeto!