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

LDFLAGS com 2 bibliotecas: 1)cjson 2)curl

Alura, venho utilizando o makefile abaixo que utiliza a libcurl, gerando o executável MEU_PROGRAMA, em linguagem C (gcc na VM Ubuntu). Dúvida: qual sintaxe devo usar se eu quiser adicionar uma segunda biblioteca cjson (além da biblioteca libcurl? Me desculpem, mas procurei na internet mas não encontrei. Se eu criar uma biblioteca própria (por exemplo: mylib.a), de que forma devo adicionar esta terceira biblioteca ao makefile?

CC = gcc
CFLAGS = -Wall -Iheader
LDFLAGS = -lcurl

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)/MEU_PROGRAMA

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

Olá, Alberto!

Entendo que você está procurando adicionar mais bibliotecas ao seu arquivo Makefile. No caso da biblioteca cjson e de uma biblioteca própria (mylib.a), você pode adicionar essas bibliotecas na variável LDFLAGS do seu arquivo Makefile.

Aqui está um exemplo de como você pode fazer isso:

LDFLAGS = -lcurl -lcjson -L/path/to/mylib -lmylib

Neste exemplo, -lcjson adiciona a biblioteca cjson e -lmylib adiciona a biblioteca mylib.a. O -L/path/to/mylib especifica o caminho para a biblioteca mylib.a. Você deve substituir /path/to/mylib pelo caminho real para a biblioteca mylib.a no seu sistema.

Seu Makefile atualizado ficaria assim:

CC = gcc
CFLAGS = -Wall -Iheader
LDFLAGS = -lcurl -lcjson -L/path/to/mylib -lmylib

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)/MEU_PROGRAMA

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

Espero ter entendido e conseguido te ajudar. Qualquer coisa manda aqui e bons estudos!

solução!

Renan, adicionei a segunda biblioteca (cjson) no makefile abaixo:

CC = gcc
CFLAGS = -Wall -Iheader
LDFLAGS = -lcurl -lcjson

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)/MEU_PROGRAMA

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

e estou testando as duas bibliotecas com MEU_PROGRAMA. Vou criar uma terceira biblioteca e, a adicionarei conforme sua orientação. Muito obrigado + 1 X!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software