2016-03-08 129 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