Не могу правильно скомпилировать с make - PullRequest
0 голосов
/ 28 апреля 2019

Когда я пытаюсь скомпилировать с 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:

make command

команда gcc:

gcc command

Исходный код:

https://github.com/KisuYami/WeirdRPG

...