如何 install/compile SDL2 C 代码 Linux/Ubuntu
How to install/compile SDL2 C code on Linux/Ubuntu
我目前正在做一些 C 编程,实际上我想使用 SDL 库。我想在 Linux 上用 C 构建一个小型 2D 游戏来提高我的技能。
我的问题是我不是超级 Makefile 用户,也不是 Linux 超级用户的库,我只是在项目中配置一次,仅此而已。
所以我在 UBUNTU 14.04 上编译 SDL2 程序时遇到了一些问题。
我从以下位置下载了最新的 SDL 库:http://www.libsdl.org/download-2.0.php
然后我用默认步骤安装了:
./configure
make
sudo make install
之后我可以看到 /usr/include/SDL2 中有一些东西所以我猜它已经安装了。
#include <stdlib.h>
#include <stdio.h>
#include <SDL2/SDL.h>
int main(int argc, char *argv[])
{
printf(“SDL test\n”);
return 0;
}
因为我还在学习 Makefiles 和 SDL,所以我还没有想出如何制作它。
但我发现这个 Makefile 编译旧的 SDL 而不是 SDL2
CPP=gcc
CFLAGS=-O3
LDFLAGS=-lSDL -lSDL_mixer #Linker
EXEC=test
all: ${EXEC}
${EXEC}: ${EXEC}.o
${CPP} $(CFLAGS) -o ${EXEC} ${EXEC}.o ${LDFLAGS}
${EXEC}.o: ${EXEC}.c
${CPP} $(CFLAGS) -o ${EXEC}.o -c ${EXEC}.c
clean:
rm -fr *.o
mrproper: clean
rm -fr ${EXEC}
但是这个 Makefile 对我不起作用,它说它不知道 lSDL_Mixer 和其他东西。
如何使用 Makefile 和 vim 编辑器构建一个可用的 Makefile 以使用 SDL2 编译 C 程序。
在此先感谢您的帮助
您可以按照 SDL Linux FAQ 的建议使用 sdl2-config
来获取所需的编译器和链接器标志:
SDL_CFLAGS := $(shell sdl2-config --cflags)
SDL_LDFLAGS := $(shell sdl2-config --libs)
CFLAGS := $(SDL_CFLAGS) -O3
LDFLAGS := $(SDL_LDFLAGS) -lSDL_mixer
它将找到您的 SDL.h
和 return 相应标志的位置(例如 -I/usr/include/SDL2
在您的情况下)以及它认为必要的其他标志(例如对我来说它给出 -D_THREAD_SAFE
).然后您可以简单地 #include <SDL.h>
,这是包含 SDL 的标准方法。
我会继续为您清理 Makefile。
CFLAGS = -O3
LDFLAGS =
appname = test
all: $(appname)
clean:
rm -f $(appname) *.o
.PHONY: all clean
sdl_cflags := $(shell pkg-config --cflags sdl2 SDL2_mixer)
sdl_libs := $(shell pkg-config --libs sdl2 SDL2_mixer)
override CFLAGS += $(sdl_cflags)
override LIBS += $(sdl_libs)
$(appname): test.o
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
说明
makefile 中的变量应与 $(...)
一起使用,而不是 ${...}
。
pkg-config
有 SDL_Mixer 的条目,sdl-config
没有。 pkg-config
更通用。
将 override
与 SDL 标志一起使用允许您 运行 类似 make CFLAGS="-O0 -g"
的东西而不会破坏 SDL 支持。
这实际上很重要:SDL 库标志必须位于命令行的末尾,在 LIBS
中,因为 GNU 链接器对顺序敏感其中指定了库。
你不需要为 .c
文件制定明确的规则,因为 GNU Make 有隐含的规则,这很好。
请注意,此生成文件中缺少一些非常重要的功能。例如,当您更改头文件时,它不会自动重新编译。我建议您使用其他构建系统,例如 CMake 或 SCons,它们会自动处理此问题。您也可以使用 Make 完成此操作,但您必须将几行神秘的代码粘贴到您的 makefile 中。
我目前正在做一些 C 编程,实际上我想使用 SDL 库。我想在 Linux 上用 C 构建一个小型 2D 游戏来提高我的技能。
我的问题是我不是超级 Makefile 用户,也不是 Linux 超级用户的库,我只是在项目中配置一次,仅此而已。
所以我在 UBUNTU 14.04 上编译 SDL2 程序时遇到了一些问题。
我从以下位置下载了最新的 SDL 库:http://www.libsdl.org/download-2.0.php
然后我用默认步骤安装了:
./configure
make
sudo make install
之后我可以看到 /usr/include/SDL2 中有一些东西所以我猜它已经安装了。
#include <stdlib.h>
#include <stdio.h>
#include <SDL2/SDL.h>
int main(int argc, char *argv[])
{
printf(“SDL test\n”);
return 0;
}
因为我还在学习 Makefiles 和 SDL,所以我还没有想出如何制作它。
但我发现这个 Makefile 编译旧的 SDL 而不是 SDL2
CPP=gcc
CFLAGS=-O3
LDFLAGS=-lSDL -lSDL_mixer #Linker
EXEC=test
all: ${EXEC}
${EXEC}: ${EXEC}.o
${CPP} $(CFLAGS) -o ${EXEC} ${EXEC}.o ${LDFLAGS}
${EXEC}.o: ${EXEC}.c
${CPP} $(CFLAGS) -o ${EXEC}.o -c ${EXEC}.c
clean:
rm -fr *.o
mrproper: clean
rm -fr ${EXEC}
但是这个 Makefile 对我不起作用,它说它不知道 lSDL_Mixer 和其他东西。
如何使用 Makefile 和 vim 编辑器构建一个可用的 Makefile 以使用 SDL2 编译 C 程序。
在此先感谢您的帮助
您可以按照 SDL Linux FAQ 的建议使用 sdl2-config
来获取所需的编译器和链接器标志:
SDL_CFLAGS := $(shell sdl2-config --cflags)
SDL_LDFLAGS := $(shell sdl2-config --libs)
CFLAGS := $(SDL_CFLAGS) -O3
LDFLAGS := $(SDL_LDFLAGS) -lSDL_mixer
它将找到您的 SDL.h
和 return 相应标志的位置(例如 -I/usr/include/SDL2
在您的情况下)以及它认为必要的其他标志(例如对我来说它给出 -D_THREAD_SAFE
).然后您可以简单地 #include <SDL.h>
,这是包含 SDL 的标准方法。
我会继续为您清理 Makefile。
CFLAGS = -O3
LDFLAGS =
appname = test
all: $(appname)
clean:
rm -f $(appname) *.o
.PHONY: all clean
sdl_cflags := $(shell pkg-config --cflags sdl2 SDL2_mixer)
sdl_libs := $(shell pkg-config --libs sdl2 SDL2_mixer)
override CFLAGS += $(sdl_cflags)
override LIBS += $(sdl_libs)
$(appname): test.o
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
说明
makefile 中的变量应与
$(...)
一起使用,而不是${...}
。pkg-config
有 SDL_Mixer 的条目,sdl-config
没有。pkg-config
更通用。将
override
与 SDL 标志一起使用允许您 运行 类似make CFLAGS="-O0 -g"
的东西而不会破坏 SDL 支持。这实际上很重要:SDL 库标志必须位于命令行的末尾,在
LIBS
中,因为 GNU 链接器对顺序敏感其中指定了库。你不需要为
.c
文件制定明确的规则,因为 GNU Make 有隐含的规则,这很好。
请注意,此生成文件中缺少一些非常重要的功能。例如,当您更改头文件时,它不会自动重新编译。我建议您使用其他构建系统,例如 CMake 或 SCons,它们会自动处理此问题。您也可以使用 Make 完成此操作,但您必须将几行神秘的代码粘贴到您的 makefile 中。