2013-03-26 107 views
0

我試圖修改和編譯樹莓派上的uvccapture。我得到了源from here(這只是幾個文件)。編譯C++,組織包含文件

(我認爲)它需要的唯一外部文件是jpeglib,我從here下載。

編譯時,我在哪裏放置jpeglib源文件? UVCCapture具有以下行:

#include <jpeglib.h> 

這是否意味着我應該把jpeglib源文件在同一目錄UVCCapture源文件?這似乎很混亂。我如何設置編譯器(修改Makefile?),以及在哪裏放置jpeglib文件,以便我不需要更改uvccapture包含文件行?

而一個側面的問題,它如何只包括.h文件而不是.c文件? (我很新的C/C++)

這裏是Makefile中:

CC=gcc 
CPP=g++ 
APP_BINARY=uvccapture 
VERSION = 0.4 
PREFIX=/usr/local/bin 

WARNINGS = -Wall 

CFLAGS = -std=gnu99 -O2 -DLINUX -DVERSION=\"$(VERSION)\" $(WARNINGS) 
CPPFLAGS = $(CFLAGS) 

OBJECTS= uvccapture.o v4l2uvc.o 

all: uvccapture 

clean: 
    @echo "Cleaning up directory." 
    rm -f *.a *.o $(APP_BINARY) core *~ log errlog 

install: 
    install $(APP_BINARY) $(PREFIX) 

# Applications: 
uvccapture: $(OBJECTS) 
    $(CC) $(OBJECTS) $(XPM_LIB) $(MATH_LIB) -ljpeg -o $(APP_BINARY) 

感謝

+1

作爲一個頭擡起你的第一個鏈接是不存在的(你得到uvccapture的地方的鏈接) – alrikai 2013-03-27 00:03:16

回答

3

源文件(uvccapture.c)不關心這裏頭文件(jpeglib.h)是 - 至少不應該。必須告訴編譯器在哪裏查找頭文件;傳統上,頭文件在一些像inc_files/目錄,並且編譯器會像

gcc -blah -blah -blah -Iinc_files -c -o uvccapture.o uvccapture.c 

如果使用make,然後讓應該執行這樣的命令調用的命令。因此,要麼編輯makefile,要麼將頭文件放在當前目錄中。

在C/C++中使用#include的理想方式是讓源文件和頭文件包含頭文件。也就是說,在foo.c會有幾樣行:

#include <bar> 
#include "baz.h" 

baz.h可能有下面幾行:

#include <vector> 
#include "qux.h" 

你幾乎從來沒有看到#include foo.c,因爲它幾乎從來沒有一個好主意。