2016-10-03 50 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,非常感谢 –

相关问题