簡體   English   中英

項目“無輸入文件”的根目錄中的Makefile

[英]Makefile in the Root Directory of a Project “no Input Files”

我在使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庫的某個文件中找到兩個主要方法,但是我不確定應該如何解決該錯誤。

請顯示被調用的命令以及您得到,剪切和粘貼的確切錯誤。 如果您這樣做的話,大約要花我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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM