繁体   English   中英

如何在Linux / Ubuntu上安装/编译SDL2 C代码

[英]How to install/compile SDL2 C code on Linux/Ubuntu

我目前正在做一些C编程,我实际上想要使用SDL库。 我想在Linux上用C语言构建一个小型2D游戏,以提高我的技能。

我的问题是我不是Linux超级用户的超级Makefile用户或库,我只是在项目上配置一次就是这样。

所以我在UBUNTU 14.04上编译SDL2程序时遇到了一些麻烦。

我从http://www.libsdl.org/download-2.0.php下载了最新的SDL库

然后我用默认步骤安装它:

./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和其他东西。

如何使用Makefiles和vim编辑器构建可运行的Makefile以使用SDL2编译C程序。

在此先感谢您的帮助

我会继续为你清理那个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更通用。

  • 使用带有SDL标志的override允许您在不破坏SDL支持的情况下运行类似make CFLAGS="-O0 -g"

  • 这实际上很重要:由于GNU链接器对指定库的顺序很敏感,因此SDL库标志必须位于命令行的末尾( LIBS

  • 你不需要明确的.c文件规则,因为GNU Make有一些隐含的规则。

请注意,此makefile中缺少一些非常重要的功能。 例如,当您更改头文件时,它不会自动重新编译。 我建议您使用另一个构建系统,例如CMake或SCons,它会自动处理此问题。 您也可以使用Make,但您必须将几行神秘的代码粘贴到您的makefile中。

您可以使用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的位置并返回相应的标志(例如,在您的情况下为-I/usr/include/SDL2 )以及其认为必要的其他标志(例如,对我来说它给出-D_THREAD_SAFE )。 然后你可以简单地#include <SDL.h> ,这是包含SDL的标准方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM