SDL 应用程序的 Makefile 仅在项目提前构建时运行
Makefile for SDL application only runs when the project has been built ahead of time
好吧,这个绝对让我大吃一惊。基本上,我有一个简单的 makefile 设置 运行s g++ 来使用 SDL2 构建我的基本 C++ 项目。现在,当我 运行 这个 makefile 时,它给了我一堆关于 "undefined reverence to 'SDL_Init'" 的错误以及我在程序中使用的从 SDL2 中获取的每个函数。但是,当我从 makefile 复制命令并从终端复制 运行 时,一切都很顺利。无需更改文件并再次 运行 编译 make 文件,它编译得很好。
我是运行ning初级OS Loki,g++版本5.4.0 20160609,make版本4.1,libsdl2-dev版本2.0.4+dfsg1-2ubuntu2
这是我正在使用的 make 文件:
生成文件
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,当它是 运行 时,上面的文件没有使用相同的命令在 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
,但是没有规则可以创建 patchworkrpg
,因此 make 创建了您即时看到的隐式规则 g++ patchworkrpg.cpp -o patchworkrpg
。
不太确定您是如何尝试组织事物的,但实际上 运行 您自己的命令行应该通过此更改来解决:
all: $(ONAME).cpp
好吧,这个绝对让我大吃一惊。基本上,我有一个简单的 makefile 设置 运行s g++ 来使用 SDL2 构建我的基本 C++ 项目。现在,当我 运行 这个 makefile 时,它给了我一堆关于 "undefined reverence to 'SDL_Init'" 的错误以及我在程序中使用的从 SDL2 中获取的每个函数。但是,当我从 makefile 复制命令并从终端复制 运行 时,一切都很顺利。无需更改文件并再次 运行 编译 make 文件,它编译得很好。
我是运行ning初级OS Loki,g++版本5.4.0 20160609,make版本4.1,libsdl2-dev版本2.0.4+dfsg1-2ubuntu2
这是我正在使用的 make 文件:
生成文件
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,当它是 运行 时,上面的文件没有使用相同的命令在 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
,但是没有规则可以创建 patchworkrpg
,因此 make 创建了您即时看到的隐式规则 g++ patchworkrpg.cpp -o patchworkrpg
。
不太确定您是如何尝试组织事物的,但实际上 运行 您自己的命令行应该通过此更改来解决:
all: $(ONAME).cpp