c++ - 项目根目录下的Makefile "no Input Files"

标签 c++ makefile g++

我在让 Makefile 为简单的 C++ 项目工作时遇到问题。 我得到的错误是

“ fatal error :没有输入文件”

这是我的项目结构:

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 设置不正确。我是 Makefile 的新手,所以任何见解都将不胜感激。

谢谢。

编辑:

所以我能够解决我遇到的大部分问题,但是现在当我尝试通过命令行编写我的程序时出现以下错误:

: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 库中某处的文件中找到了两个主要方法,但我不确定我应该如何解决错误。

最佳答案

请显示调用的命令和您得到的确切错误,剪切并粘贴。如果您这样做,我将花费大约 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

这里的问题是您的 CFLAGS 中有 -I,但后面没有目录。这意味着下一个词,在本例中为 src/main.cpp,被认为是要添加到包含行的目录。

可能你想要这样的东西:

CFLAGS = -c -Wall -I$(INC_DIR1) -I$(INC_DIR2)

关于c++ - 项目根目录下的Makefile "no Input Files",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901736/

相关文章:

c++ - 如何初始化参数化模板类的静态成员

c - 制作 : command not found when specifying cross compiler path

linux - 使用 gfortran 在 makefile 中进行库链接

c++11 - 使用 C++11 的 MinGW 和压缩结构对齐

c++ - 将透明图标加载到应用程序的托盘菜单

c++ - 为 SFINAE 测试仪提供默认值零的原因是什么?

c++ - 如何用 NaN 元素初始化双矩阵?

makefile - 声明所有目标 PHONY

c++ - g++ 4.7.2 中缺少 std::stoi?

c++ - GDB 以无序的方式跳到错误的行