Как можно исправить ошибку в Makefile?

У меня возникла проблема с компиляцией Makefile, и я получаю следующую ошибку: `makefile:37: *** пропущен разделитель. Останов`. Можете помочь мне понять, что именно не так с этой строкой: `g++ -I $(INCL) $(SRCS) -o $(TARGET)`? Как можно исправить эту ошибку? 

Вот код Makefile для справки:

```
TARGET = ./hook.dll
INCL = \
    includes.h \
    MinHook.h \
    buffer.h \
    trampoline.h \
    hde32.h \
    hde64.h \
    pstdint.h \
    table32.h \
    table64.h \
    imconfig.h \
    imgui_impl_dx9.h \
    imgui_impl_win32.h \
    imgui_internal.h \
    imgui.h \
    imstb_rectpack.h \
    imstb_textedit.h \
    imstb_truetype

SRCS = \
    main.cpp \
    kiero.cpp \
    hde32.c \
    hde64.c \
    buffer.c \
    hook.c \
    trampoline.c \
    imgui_demo.cpp \
    imgui_draw.cpp \
    imgui_impl_dx9.cpp \
    imgui_impl_win32.cpp \
    imgui_widgets.cpp \
    imgui.cpp

$(TARGET):
    g++ -I $(INCL) $(SRCS) -o $(TARGET)

all: $(TARGET)

build: $(TARGET)
```
  • 12 октября 2024 г. 17:12
Ответы на вопрос 2
Ваша ошибка `*** пропущен разделитель. Останов` возникает из-за неправильного форматирования команды в Makefile. В Makefile команды должны быть отступлены с помощью табуляции (Tab), а не пробелов. Убедитесь, что строка с командой компиляции начинается с табуляции.

Вот как должен выглядеть правильный Makefile:

```makefile
TARGET = ./hook.dll
INCL = \
    includes.h \
    MinHook.h \
    buffer.h \
    trampoline.h \
    hde32.h \
    hde64.h \
    pstdint.h \
    table32.h \
    table64.h \
    imconfig.h \
    imgui_impl_dx9.h \
    imgui_impl_win32.h \
    imgui_internal.h \
    imgui.h \
    imstb_rectpack.h \
    imstb_textedit.h \
    imstb_truetype

SRCS = \
    main.cpp \
    kiero.cpp \
    hde32.c \
    hde64.c \
    buffer.c \
    hook.c \
    trampoline.c \
    imgui_demo.cpp \
    imgui_draw.cpp \
    imgui_impl_dx9.cpp \
    imgui_impl_win32.cpp \
    imgui_widgets.cpp \
    imgui.cpp

$(TARGET): $(SRCS) $(INCL)
    g++ -I . $(SRCS) -o $(TARGET)

all: $(TARGET)

build: $(TARGET)
```

**Обратите внимание:**
1. Убедитесь, что строка `g++ -I . $(SRCS) -o $(TARGET)` начинается с символа табуляции (Tab).
2. Я также добавил зависимость `$(SRCS) $(INCL)` к цели `$(TARGET)`, чтобы указать, что это целевая сборка зависит от источников и заголовков. Это улучшает читаемость и позволяет `make` знать, что нужно пересобирать, если какие-либо из этих файлов изменятся.

Теперь проверьте ваш Makefile еще раз и убедитесь, что все отступы выполнены с помощью табуляции. После этого вы должны убрать ошибку компиляции.
ругается на g++ -I $(INCL) $(SRCS) -o $(TARGET), как можно исправить?

Заменить пробелы в начале строки одним табом. Команды в makefile начинаются с табов.
Похожие вопросы