Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

NO RULE TO MAKE TARGET

O MAKEFILE ABAIXO GERA OS ARQUIVOS COM EXTENSAO .O NORMALMENTE, PORÉM O MAKE ME DEVOLVE A MENSAGEM: make: No rule to make target 'L/libL.a', needed by 'bin/PROGRAMAA', Stop. A BIBLIOTECA libL.a ENCONTRA-SE NO DIRETÓRIO C:/L

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
2 respostas

Olá, Guilherme. Tudo bem?

Pela mensagem, o make não está conseguindo encontrar a biblioteca libL.a no caminho especificado. Verifica alguns pontos:

  • Verifique se o caminho para a biblioteca libL.a está correto. No seu Makefile, o caminho está como L/libL.a, mas você mencionou que a biblioteca está em C:/L. Tente ajustar o caminho no Makefile para refletir o local correto da biblioteca:

    $(EXECUTABLE): $(OBJ) C:/L/libL.a
        $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
    
  • Certifique-se de que o -L no LDFLAGS aponta para o diretório correto onde a biblioteca está localizada. No seu caso, pode ser necessário alterar:

    LDFLAGS = -lcurl -lcjson -lssl -lcrypto -L/C:/L -lL
    
  • Verifique se o nome da biblioteca (libL.a) está correto e se não há nenhum erro de digitação.

Espero ter ajudado. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!
solução!

DEPOIS DOS AJUSTES NO MAKEFILE, FOI GERADO O PROGRAMA_A. OBRIGADO PELA PASSAGEM DE CONHECIMENTO, RENAN.