2016-03-08 143 views
0

我想建立一个项目,使(上Raspbian GCC)编译的树莓派

这里SDL项目是生成文件(我去掉了一些不必要的部分):

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中逐个删除选项,但没有运气...

我错过了什么?

回答

0

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

cc -c -o Affichage.o Affichage.c 

这没有-I路径,这是一个错误的来源。

您的目标是生成的可执行文件,但不包含目标文件。使内建规则从C源代码编译目标文件,但它并不知道你的变量cflags。到目前为止,您的选择是:

  • 定义你自己的方式规则

如:

%.o: %.c 
    gcc $(cflags) -c $< -o [email protected] 

但是,你cflags包含-lSDL2,这是连接标志,它应该只对指定(在技术上它不是cflag)。将其移动到单独的变量(通常为LIBS,然后可以将其包含在make的半标准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 [email protected] $(LDFLAGS) 
$(objects): types.h 

其余部分将通过潜规则来完成。

+0

我试了一下,现在它工作。我必须说,我不明白所有事情,比如为什么CFLAGS似乎不被使用,以及$ ^,$ @等等。但至少,它的工作原理非常感谢! – Choz