编译C ++,组织包含文件

时间:2013-03-26 23:50:57

标签: c++ compilation

我正在尝试修改和编译Raspberry Pi上的uvccapture。我得到了源from here(它只是几个文件)。

(我认为)它所需的唯一外部文件是我从here下载的jpeglib的文件。

编译时,我在哪里放置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 个答案:

答案 0 :(得分:3)

源文件(uvccapture.c)并不关心头文件(jpeglib.h)的位置 - 至少它不应该。必须告诉编译器在哪里查找头文件;传统上,头文件放在某些目录中,如inc_files/,并使用类似

的命令调用编译器
gcc -blah -blah -blah -Iinc_files  -c -o uvccapture.o uvccapture.c

如果你使用Make,那么Make应该执行这样的命令。因此,要么编辑makefile,要么将头文件放在当前目录中。

在C / C ++中使用#include的合理方法是让源文件和头文件包含头文件。也就是说,在foo.c中会有几行,如:

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

并且在baz.h中可能会有以下几行:

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

你几乎从未见过#include foo.c,因为它几乎不是一个好主意。