在Raspberry Pi上编译SDL项目

时间:2016-03-08 23:34:47

标签: gcc raspberry-pi sdl

我正在尝试使用make(在Raspbian上使用gcc)构建一个项目

这是makefile(我删除了一些不必要的部分):

objects = 3d.o Affichage.o   [...]
cflags = -I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2
poly : %(objects)
    gcc $(cflags) $(objects) -o poly

($objects) : types.h
[...]

运行Make时,我得到了:

cc  -c -o Affichage.o Affichage.c
fatal error: SDL.h: No such file or directory
 #include <SDL.h>

我检查了文件夹,一切似乎都好。 SDL.h确实在/ usr / local / include / SDL2中。我试图在cflags中逐个删除选项,没有运气......

我错过了什么?

1 个答案:

答案 0 :(得分:0)

告诉你它试图执行的确切命令:

cc  -c -o Affichage.o Affichage.c

这不是-I路径,这是错误的来源。

您具有生成的可执行文件的目标,但没有目标文件的目标。具有内置规则来从C源编译目标文件,但它不知道您的cflags变量。到目前为止,您的选择是:

  • 定义您自己的模式规则

e.g:

%.o: %.c
   gcc $(cflags) -c $< -o $@

但是,您的cflags包含-lSDL2,这是链接标记,应仅在链接阶段指定(因此从技术上讲,它不是cflag)。将其移至单独的变量(通常为LIBS,然后可以将其展开为制作半标准LDFLAGS)。

  • 使用知道
  • 的变量

在这种情况下,它是CFLAGS

CC:=gcc
CFLAGS:=-I/usr/local/include/SDL2
LIBS:=-lSDL2
LDFLAGS:=-L/usr/local/lib $(LIBS)
objects:=3d.o Affichage.o
poly: $(objects)
    $(CC) $^ -o $@ $(LDFLAGS)
$(objects): types.h

其余的将由隐式规则完成。