SDL应用程序的Makefile仅在项目提前构建时运行

Makefile for SDL application only runs when the project has been built ahead of time

本文关键字:构建 运行 项目 应用程序 Makefile SDL      更新时间:2023-10-16

好了,这个绝对让我大吃一惊。基本上,我已经设置了一个简单的makefile,它运行g++,用SDL2构建我的基本c++项目。现在,当我运行这个makefile时,它给了我一堆"未定义的崇敬'SDL_Init'"的错误,以及我在程序中使用的SDL2中的每个函数。但是,当我从makefile复制命令并从终端运行它时,一切都很好。无需更改文件并再次运行make文件,它就可以正常编译。

我运行的是Elementary OS Loki, g++版本5.4.0 20160609,make版本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 initn";
    }
    else
    {
    }
}

我已经把一些多余的东西划掉了,但这就是要点。就像我说的,唯一抛出错误的是makefile,而不是上面的文件在makefile之外用相同的命令编译。

编辑:额外信息

运行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

我也试过从makefile运行那个确切的命令,它失败了,错误完全相同

(您的示例Makefile和源文件不完整,因此我必须编辑它们以进行测试)

在你的Makefile:

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

all依赖于patchworkrpg,但是没有make patchworkrpg的规则,所以make创建了您在运行中看到的隐式规则g++ patchworkrpg.cpp -o patchworkrpg

不太确定你是如何组织的,但实际运行你自己的命令行,这个改变应该修复它:

all: $(ONAME).cpp