Когда я пытаюсь скомпилировать с make
, программа не работает, но компиляция с использованием gcc
через оболочку работает.make
не выдает ошибку или что-либо и работает правильно, но только с одним исходным файлом, но не работает должным образом (playler.c), это настолько странно, что IA врага (обозначается как "(A)") работает.И как я вижу, display.c также не работает с командой make
(у врага не должно быть следа).
Когда я компилирую с помощью команды оболочки, я должен включить.c вместо .h, но с make работает нормально с .h, пример:
engine.c с командой оболочки:
#include <ncurses.h>
#include <unistd.h>
#include "./engine.h"
#include "./display.c"
#include "./enemy.c"
#include "./map.c"
#include "./player.c"
#include "../../config.h"
engine.c с командой make:
#include <ncurses.h>
#include <unistd.h>
#include "./engine.h"
#include "./display.h"
#include "./enemy.h"
#include "./map.h"
#include "./player.h"
#include "../../config.h"
Оболочка:
gcc -lncurses src/main.c -o WeirdRpg
Makefile, который я создал первым:
NAME=WeirdRpg
RM=rm -rf
CC=gcc
CLIBS= -lncurses
CFLAGS= -g -Wall -pedantic
SRC=src
OBJ=build/
OUT=build/$(NAME)
SOURCES=$(wildcard $(SRC)/*.c)
ENGINE=$(wildcard $(SRC)/engine/*.c)
OBJECTS=$(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES) $(ENGINE))
all: $(OUT)
$(OUT): $(OBJECTS)
$(CC) $(CFLAGS) $(CLIBS) $^ -o $@
$(OBJ)/%.o: $(SRC)/%.c
mkdir -p "$(shell dirname "$@")"
$(CC) $(CFLAGS) -I$(SRC) -c $< -o $@
$(OBJ)/%.o: $(SRC)/%.c
mkdir -p "$(shell dirname "$@")"
$(CC) $(CFLAGS) -I$(SRC) -c $< -o $@
debug: CFLAGS+=-DDEBUG
debug: build
.PHONY: clean
clean:
$(RM) $(OBJ) $(OUT)
Makefile с сайта:
TARGET_EXEC ?= WeirdRpg
BUILD_DIR ?= ./build
SRC_DIRS ?= ./src
CLIBS= -lncurses
CC=clang
SRCS := $(shell find $(SRC_DIRS) -name *.cpp -or -name *.c -or -name *.s)
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
INC_DIRS := $(shell find $(SRC_DIRS) -type d)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
CPPFLAGS ?= $(INC_FLAGS) -MMD -MP
$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
$(CC) $(CLIBS) $(OBJS) -o $@ $(LDFLAGS)
$(BUILD_DIR)/%.c.o: %.c
$(MKDIR_P) $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
$(RM) -r $(BUILD_DIR)
-include $(DEPS)
MKDIR_P ?= mkdir -p
Результат:
команда make:
команда gcc:
Исходный код:
https://github.com/KisuYami/WeirdRPG