# Переменные
CC = gcc # Компилятор
INCLUDE_DIR = src/logic
CFLAGS = -Wall -Werror -Wextra -std=c11 -O2 -I$(INCLUDE_DIR) # Опции компиляции (вывод предупреждений и отладочная информация)
SRC_DIR := src/brick_game/tetris # Папка с исходным кодом
OBJ_DIR = obj # Папка для объектных файлов
BIN = tetris_exe # Путь исполняемого файла
INSTALL_DIR = build
# Получаем список всех .c файлов в src/brick_game/tetris
SRC := $(wildcard $(SRC_DIR)/*.c)
# Получаем список соответствующих .o файлов, заменяем .c на .o
OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRC))
# Правила
.PHONY: all clean install uninstall show-src
all: $(BIN)
show-src:
@echo "Путь к исходникам: $(SRC_DIR)"
@echo "Исходники: $(wildcard $(SRC_DIR)/*.c)"
# Правило для создания исполняемого файла
$(BIN): $(OBJ)
$(CC) $^ -o $@
# Правило для компиляции .c файлов в .o
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(OBJ_DIR) # Создаем папку для объектных файлов
$(CC) $(CFLAGS) -c $< -o $@
# Цель для установки
install: all
@mkdir -p $(INSTALL_DIR)/bin
cp $(BIN) $(INSTALL_DIR)/bin/
# Цель для удаления установленного файла
uninstall:
rm -f $(INSTALL_DIR)/bin/$(BIN) || true
# Очистка объектных файлов и исполняемого файла
clean:
rm -rf $(OBJ_DIR) $(BIN)
По какой-то причине запись вида "$(SRC_DIR)/*.c" воспринимается не верно, и не выводит список файлов. Похоже на то что строка не объединяется и получается что-то типа "$(wildcard $(SRC_DIR))" и "$(wildcard /*.c)"
Вывод в терминал имеет следующий вид:
Путь к исходникам: src/brick_game/tetris
Исходники: src/brick_game/tetris
Почему так происходит все файлы на месте.
Запись "ls src/brick_game/tetris/*.c " прекрасно всё находит.
Помогите починить пожалуйста, не понимаю в чём проблема.