首页 > 解决方案 > Makefile“主可执行文件的隐式输入/启动”

问题描述

这是我的项目结构

root
  |____Makefile
  |
  |___src
  |     |____*.c 
  |
  |___inc
  |      |___*.h
  |
  |___obj

问题是当我尝试制作时出现此错误

------->建筑狼1 ...

体系结构 x86_64 的未定义符号:“_main”,引用自:主要可执行文件 ld 的隐式入口/开始:未找到体系结构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) make: *** [Wolf1] 错误 1

RM              = rm -rf
SDL              = libsdl2.a
TTF              = libsdl2_ttf.a
FT              = libft.a
LFT_DIR         = libft
LFT             = $(LFT_DIR)/$(FT)
LSDL            = $(LSDL_DIR)/$(SDL)
LTTF            = $(LTTF_DIR)/$(TTF)
NAME            = exu100
###########################color code
BLACK        := $(shell tput -Txterm setaf 0)
RED          := $(shell tput -Txterm setaf 1)
GREEN        := $(shell tput -Txterm setaf 2)
YELLOW       := $(shell tput -Txterm setaf 3)
LIGHTPURPLE  := $(shell tput -Txterm setaf 4)
PURPLE       := $(shell tput -Txterm setaf 5)
BLUE         := $(shell tput -Txterm setaf 6)
WHITE        := $(shell tput -Txterm setaf 7)
RESET         = \033[0m
############################Libraries
INCS_DIR := inc
INCS_DIR += $(LFT_DIR)
############################Compilation
SRCS_DIR = srcs
OBJS_DIR = objs
############################FILE
INCS := inc/wolf_3d.h
INCS += libft/libft.h
###########
SRC := main.c
SRC += stock_map.c
SRC += texture.c
SRC += events.c
SRC += wolf_miniMap.c
SRC += init_wolf.c
SRC += game_engine.c
SRC += outils.c
SRC += sdl_init.c
SRC += mini_map.c
######################
LSDL_DIR         = $(HOME)/.brew/Cellar/sdl2/2.0.12_1/lib
LTTF_DIR         = $(HOME)/.brew/Cellar/sdl2_ttf/2.0.15/lib
INCS_DIR        += $(HOME)/.brew/Cellar/sdl2/2.0.12_1/include/SDL2
INCS_DIR        += $(HOME)/.brew/Cellar/sdl2_ttf/2.0.15/include/SDL2
########################################3Linked libraries at compile time.
LIBS            := -L$(LSDL_DIR) -lSDL2
LIBS            += -L$(LTTF_DIR) -lSDL2_ttf
LIBS            += -L$(LFT_DIR) -lft
LIBS            += -lm
LTTF             = $(LTTF_DIR)/$(TTF)
D_SRCS           = $(addsuffix /, $(SRCS_DIR))
D_OBJS           = $(addsuffix /, $(OBJS_DIR))
C_OBJS           = $(addprefix $(D_OBJS), $(OBJS))
C_INCS           = $(foreach include, $(INCS_DIR), -I$(include))
# How files should be compiled.
CC              = gcc
OBJS            = $(SRCS:.c=.o)

# Compilation flags.

CFLAGS          = $(C_INCS) -Wall -Wextra -Werror
#----------------->>>>>>>>>>>>>>>>START<<<<<<<<<<<<<-------------------#
$(D_OBJS)%.o: $(D_SRCS)%.c $(INCS)
    @echo "$(YELLOW)------->Compiling :$(RESET)" $<
    @$(CC) $(CFLAGS) -c $< -o $@


all: $(C_OBJS) $(NAME)


$(NAME): $(LSDL) $(LTTF) $(LFT) $(C_OBJS)
    @echo "$(YELLOW)\n------->Building $(RESET)$(NAME) $(YELLOW)...\n$(RESET)"
    @$(CC) $(CFLAGS) -o $(NAME) $(C_OBJS) $(LIBS)
    @echo "$(GREEN)***   Project $(NAME) successfully compiled   ***\n$(RESET)"

print-%  : ; @echo $* = $($*)

####  make libft

$(LFT):
    @make -sC $(LFT_DIR)

### creating files for object.o

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


当我使用 {make print-C_OBJS} 检查时,似乎 .o 文件不存在

标签: cmakefile

解决方案


在生成文件中

############################Compilation
SRCS_DIR = srcs
OBJS_DIR = objs

但是这些文件夹在您的根文件夹中不存在。

重命名文件夹或相应地修改生成文件。


推荐阅读