Makefile в корневом каталоге проекта «нет входных файлов»

0

У меня возникают проблемы с тем, что мой Makefile работает для простого проекта C++. Ошибка, которую я получаю

"фатальная ошибка: нет входных файлов"

Вот моя структура проекта:

ROOT
|
|___Makefile
|
|___bin
|
|___src
|   |
|   |___main.cpp
|
|___include
    |
    |___GL
    |   |
    |   |___glew.h
    |   |___glfw3.h
    |
    |___glm
        |
        |___glm.hpp

И вот мой Makefile:

CC = g++
INC_DIR1 = include/GL
INC_DIR2 = include/glm
SRC_DIR = src
OBJ_DIR = bin

CFLAGS = -c -Wall -I
SRCS = $(SRC_DIR)/main.cpp
OBJS = $(OBJ_DIR)/main.o
DEPS = $(INC_DIR1)/glew.h $(INC_DIR1)/glfw3.h $(INC_DIR2)/glm.hpp
EXECUTABLE = game

all: $(OBJS) $(EXECUTABLE)

$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp
        $(CC) $(CFLAGS) $< -o $@

$(EXECUTABLE): $(OBJS)
        $(CC) $(OBJS) -o $@

$(OBJ_DIR)/main.o: $(DEPS)

Я не уверен, пытается ли он найти файлы.ccp для файлов заголовков или если я неправильно установил свой Makefile. Я новичок в Makefiles, поэтому любое понимание было бы очень оценено.

Благодарю.

РЕДАКТИРОВАТЬ:

Поэтому я смог решить большинство проблем, которые у меня были, но теперь я получаю следующую ошибку, когда пытаюсь сделать свою программу через командную строку:

:multiple definition of 'main'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../..\libmingw32.a(main.o):main.c:(.tex
t.startup+0x0): first defined here
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../..\libmingw32.a(main.o):main.c:(.tex
t.startup+0xa7): undefined reference to 'WinMain@16'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: c:/mingw/b
in/../lib/gcc/mingw32/4.8.1/../../..\libmingw32.a(main.o): bad reloc address 0x2
0 in section '.eh_frame'
collect2.exe: error: ld returned 1 exit status
make: *** [game.exe] Error 1

Ниже мой обновленный Makefile

#Makefile
CC = g++
INC_DIR = include
LIB_DIR = lib
SRC_DIR = src
OBJ_DIR = bin

CFLAGS = -Wall -I $(INC_DIR) 
LDFLAGS = -L $(LIB_DIR) -static -lglfw3 -lmingw32
OPTIONS = -std=c++0x -O3
SRCS = $(SRC_DIR)/main.cpp
OBJS = $(OBJ_DIR)/main.o
EXECUTABLE = game.exe

all: $(EXECUTABLE)

$(EXECUTABLE) : $(SRCS)
        $(CC) $(CFLAGS) $(LDFLAGS) $< -o  $@

clean:
    rm $(EXECUTABLE)

Я знаю, что проблема заключается в том, что он находит два основных метода в файле где-то в моей библиотеке mingw32, но я не уверен, как мне следует решить проблему.

Теги:
makefile
g++

1 ответ

0
Лучший ответ

Пожалуйста, покажите команду, которая была вызвана, и точную ошибку, которую вы получили, вырезали и вставили. Мне понадобилось бы 1/20 раз, чтобы посмотреть, что случилось, если бы вы это сделали.

Вот ваша проблема:

CFLAGS = -c -Wall -I

$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp
        $(CC) $(CFLAGS) $< -o $@

В расширенном виде это приведет к следующей команде:

g++ -c -Wall -I src/main.cpp -o bin/main.o

Проблема в том, что у вас есть -I в вашем CFLAGS, без него. Это означает, что следующим словом, в данном случае src/main.cpp, считается каталог, который будет добавлен в строку include.

Возможно, вы хотите что-то вроде:

CFLAGS = -c -Wall -I$(INC_DIR1) -I$(INC_DIR2)
  • 0
    Спасибо за ответ. Это частично помогло. Я больше не получаю ошибку «нет входных файлов», но я получаю другую ошибку: src / main.cpp: 3: 21: фатальная ошибка: GL / glew.h: такого файла или каталога нет #include <GL / glew .h> Расширенная команда выглядит так: g ++ -c -Wall -I include / GL -I include / glm src / main.cpp -o bin / main.o
  • 0
    Тогда ваш -I флаг ошибается. Вы использовали -Iinclude/GL , но ваша строка include в исходном коде включает GL/glew.h поэтому, когда компилятор добавляет их вместе, он получает include/GL/GL/glew.h который не существует. Вам просто нужно добавить -Iinclude в строку компиляции, чтобы он нашел нужный файл include/GL/glew.h
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню