Задать вопрос
@INeFFeXI

Makefile не правильно раскрывает переменные, почему?

# Переменные
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 " прекрасно всё находит.
Помогите починить пожалуйста, не понимаю в чём проблема.
  • Вопрос задан
  • 68 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
SRC_DIR := src/brick_game/tetris # Папка с исходным кодом

вот из этой строки нужно убрать все пробелы после слова tetris. Потому что иначе они попадают в переменную SRC_DIR. Комментарий можно оставить только впритык. Это же относится и к определениям остальных переменных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы