вход clang 'linker' не используется - PullRequest
0 голосов
/ 08 апреля 2020

Во-первых, мое дерево файлов выглядит следующим образом.

cub3d
|---- includes
|     |---- cub3d.h
|---- libft
|     |---- Makefile
|     |---- libft.a
|     |---- includes
|     |     |---- libft.h
|     |---- obj
|     |     |---- objectfile for libft library
|     |---- srcs
|     |     |---- sourcefile for libft library
|---- minilibx
|     |---- all of file for minilibx libarary(.a, .h, .c ...etc...)
|---- obj
|     |---- main.o
|---- srcs
|     |---- main.c
|---- Makefile

И мой make-файл выглядит так.

.PHONY: all clean fclean re

NAME = test

CC = gcc
CFLAGS = -Wall -Wextra -Werror -I $(INC_DIR)\ 
         I$(LIBFT_INC) -I $(MLX_INC)

SRC_DIR = ./srcs/
SRCS = $(addprefix $(SRC_DIR), $(SRC))
SRC =   main.c

OBJ_DIR = ./obj/
OBJS = $(addprefix $(OBJ_DIR), $(OBJ))
OBJ = $(SRC:.c=.o)

INC_DIR = includes

LIBFT_DIR = libft
LIBFT_INC = libft/includes
LIBFT_LIB = -L $(LIBFT_DIR) -lft

MLX_DIR = minilibx
MLX_INC = $(MLX_DIR)
MLX_LIB = -L $(MLX_DIR) -lmlx -lm -framework OpenGL\
           -framework AppKit

all: libft_make minilibx_make $(NAME)

$(NAME): $(OBJ_DIR) $(OBJS)
    @$(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBFT_LIB) $(MLX_LIB)
$(OBJS): $(SRCS)
    @$(CC) $(CFLAGS) -o $@ -c $(SRCS) $(LIBFT_LIB) $(MLX_LIB)

$(OBJ_DIR):
    @mkdir -p $(OBJ_DIR)

libft_make:
    @make -C libft

minilibx_make:
    @make -C minilibx

clean:
    @rm -f $(OBJS)
    @rm -rf $(OBJ_DIR)
    @make -C libft/ clean
    @echo "$(_RED)'"libft/$(OBJ_DIR)"' has been deleted. $(_END)"
    @echo "$(_RED)'"$(OBJ_DIR)"' has been deleted. $(_END)"

fclean: clean 
    @rm -f $(NAME)
    @make -C libft/ fclean
    @echo "$(_RED)'"libft.a"' has been deleted. $(_END)"
    @echo "$(_RED)'"$(NAME)"' has been deleted. $(_END)"

rma: clean fclean

re: fclean all

make -n

make -C libft
make -C minilibx
gcc -Wall -Wextra -Werror -I includes -I libft/includes -I minilibx -o obj/main.o -c srcs/main.c -L ./libft -lft -L minilibx -mlx -lm -framework OpenGL -framework Appkit
gcc -Wall -Wextra -Werror -I includes -I libft/includes -I minilibx -o test ./obj/main.o -L libft -lft -L minilibx -lmlx -lm -framework OpenGL -framework Appkit

An произошла ошибка.

лязг: ошибка: -lft: ввод 'linker' не используется [-Werror, -Wunused-аргумент командной строки]

clang: error: -lmlx : ввод 'linker' не используется [-Werror, -Wunused-аргумент командной строки]

clang: ошибка: -lm: ввод 'linker' не используется [-Werror, -Wunused-аргумент командной строки]

clang: ошибка: -framework OpenGl: ввод 'linker' не используется [-Werror, -Wunused-аргумент командной строки]

clang: error: -framework AppKit: ввод 'linker' unused [-Werror, -Wunused-command-line-аргумент]

clang, кажется, говорит, что мои флаги не используются. Что я сделал не так?

1 Ответ

2 голосов
/ 08 апреля 2020

У вас есть:

$(OBJS): $(SRCS)
    @$(CC) $(CFLAGS) -o $@ -c $(SRCS) $(LIBFT_LIB) $(MLX_LIB)

Вам не нужно указывать библиотеки при компиляции в объектные файлы. Поэтому вам нужно:

$(OBJS): $(SRCS)
    @$(CC) $(CFLAGS) -o $@ -c $(SRCS)

Рецепт меня не совсем убедил (я думаю, что все исходные файлы будут перекомпилированы при изменении любого из них), но удаление библиотек позволяет избежать прохождения времени соединения аргументы (библиотеки) для компилятора, которые не будут использоваться, потому что ссылки не выполняются.

...