2016-10-03 41 views
0

好的,所以這一個絕對讓我感到頭疼。基本上,我已經建立了一個簡單的makefile,它運行g ++來用SDL2構建我的基本C++項目。現在,當我運行這個makefile時,它給了我一大堆「SDL_Init的未定義尊敬」的錯誤,以及我在程序中使用的從SDL2取得的每一個函數。但是,當我從makefile複製命令並從終端運行它時,一切都很好。在不更改文件並再次運行make文件的情況下,它編譯得很好。用於SDL應用程序的Makefile僅在提前構建項目時運行

我運行基本OS洛基,G ++版本5.4.0 20160609,讓4.1版,libsdl2-dev的版本2.0.4 + dfsg1-2ubuntu2

這裏是我使用的make文件:

的Makefile

CC = g++ 

CFLAGS = -g -Wall 
LFLAGS = -lSDL2 

ONAME = patchworkrpg 

all: $(ONAME) 
    $(CC) $(ONAME).cpp $(LFLAGS) -o $(ONAME) 

patchworkrpg.cpp

#include <stdio.h> 


using namespace std; 

const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 


int main(int argc, char* args[]) { 
    SDL_Window* window = NULL; 

    SDL_Surface* surface = NULL; 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) { 
     cout << "SDL Failed to init\n"; 
    } 
    else 
    { 

    } 
} 

我出條紋一些額外的東西,我在那裏,但這是它的要點。就像我說的那樣,唯一引發錯誤的是運行時的makefile文件,沒有使用相同的命令編譯上述文件。運行生成文件時額外的信息

錯誤:

編輯

g++  patchworkrpg.cpp -o patchworkrpg 
/tmp/cctyEbxS.o: In function `main': 
patchworkrpg.cpp:(.text+0x25): undefined reference to `SDL_Init' 
patchworkrpg.cpp:(.text+0x62): undefined reference to `SDL_CreateWindow' 
patchworkrpg.cpp:(.text+0x8a): undefined reference to `SDL_GetWindowSurface' 
patchworkrpg.cpp:(.text+0x98): undefined reference to `SDL_Delay' 
collect2: error: ld returned 1 exit status 
<builtin>: recipe for target 'patchworkrpg' failed 
make: *** [patchworkrpg] Error 1 

命令輸入到這只是正常的終端:運行準確

g++ patchworkrpg.cpp -lSDL2 -o patchworkrpg 

我也試過命令從生成文件,它的失敗,具有完全相同的錯誤

+0

你能至少添加編譯*全*輸出?由於只有一個SDL函數調用,因此不應該太長。沒有它,這更像是一種猜測。 – keltar

+0

也是您在命令行上鍵入的命令。 –

回答

2

(你的榜樣Makefile文件和源文件不完整,所以我不得不修改它們來測試這一點。)

在你的Makefile:

ONAME = patchworkrpg 

all: $(ONAME) 
    $(CC) $(ONAME).cpp $(LFLAGS) -o $(ONAME) 

all取決於patchworkrpg,但沒有規則,使patchworkrpg ,所以make會創建您即時看到的隱含規則g++ patchworkrpg.cpp -o patchworkrpg

不太清楚你如何試圖組織的東西,但實際運行你自己的命令行這種改變應該修復它:

all: $(ONAME).cpp

+0

我想我需要繼續學習make,非常感謝 –

相關問題