【问题标题】:Compiling C++, organising include files编译 C++,组织包含文件
【发布时间】:2013-03-26 23:50:57
【问题描述】:

我正在尝试在 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)

谢谢

【问题讨论】:

  • 作为提示,您的第一个链接不存在(您获得 uvccapture 的链接)

标签: c++ compilation


【解决方案1】:

源文件 (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,因为这几乎不是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2012-05-15
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多