在 Raspberry Pi 上编译 SDL 项目
Compiling SDL project on Raspberry Pi
我正在尝试使用 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
[...]
当运行制作时,我得到:
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 中一个一个地删除选项,没有运气......
我错过了什么?
Make 告诉您它试图执行的确切命令:
cc -c -o Affichage.o Affichage.c
这没有 -I
路径,这是错误的来源。
您有生成的可执行文件的目标,但没有目标文件的目标。 Make 具有从 C 源代码编译目标文件的内置规则,但它不知道您的 cflags
变量。到目前为止,您的选择是:
- 定义您自己的模式规则
例如:
%.o: %.c
gcc $(cflags) -c $< -o $@
但是,您的 cflags
包含 -lSDL2
,它是链接标志,应仅在链接阶段指定(因此从技术上讲它不是 cflag)。将其移动到单独的变量(通常是LIBS
,然后可能会被包含在make的半标准LDFLAGS
中)。
- 使用 make 知道的变量
那么,就是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
其余的将由隐式规则完成。
我正在尝试使用 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
[...]
当运行制作时,我得到:
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 中一个一个地删除选项,没有运气......
我错过了什么?
Make 告诉您它试图执行的确切命令:
cc -c -o Affichage.o Affichage.c
这没有 -I
路径,这是错误的来源。
您有生成的可执行文件的目标,但没有目标文件的目标。 Make 具有从 C 源代码编译目标文件的内置规则,但它不知道您的 cflags
变量。到目前为止,您的选择是:
- 定义您自己的模式规则
例如:
%.o: %.c
gcc $(cflags) -c $< -o $@
但是,您的 cflags
包含 -lSDL2
,它是链接标志,应仅在链接阶段指定(因此从技术上讲它不是 cflag)。将其移动到单独的变量(通常是LIBS
,然后可能会被包含在make的半标准LDFLAGS
中)。
- 使用 make 知道的变量
那么,就是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
其余的将由隐式规则完成。