在c ++项目中包含dlib

时间:2016-08-10 15:29:38

标签: c++ makefile include libraries dlib

我试图让dlib库在我的c ++项目中运行,并且不知道如何处理我的Makefile和#include< ...>在我的脚本的头文件中。我已将头文件和脚本放在src目录中。已经对dlib库建立了符号链接,该链接位于include目录中(请参阅下面的文件夹结构)。

在dlib网站上说:

  

您不应将dlib文件夹本身添加到编译器的包含路径

     

相反,您应该将包含dlib文件夹的文件夹添加到包含搜索路径,然后使用#include形式的include语句。这将确保一切正确构建。

我唯一想要的是在我的头文件中包含dlib并使其编译,以便我可以使用dlib的所有功能。你能帮我解决这个问题吗?

文件夹结构如下:

    projectDir
    |-Makefile
    |-src
    | |-main.cpp
    | |-main.hpp
    |-include
      |-dlib (symbolic link)
        |-all
        |  |-source.cpp
        |- lots of header files
        |-...

makefile如下所示:

    CC      := g++ # This is the main compiler
    # CC := clang --analyze # and comment out the linker last line for sanity
    SRCDIR  := src
    LIBDIR  := lib
    BUILDDIR:= build
    TARGET  := bin/main

    SRCEXT  := cpp
    SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
    OBJECTS := $(patsubst$(SRCDIR)/%,$(BUILDDIR)                                                        /%,$(SOURCES:.$(SRCEXT)=.o))
    CFLAGS  := -g # -Wall
    LIB     := $(shell find $(LIBDIR) -type f -name *.$(SRCEXT))
    INC     :=

    $(TARGET): $(OBJECTS)
        @echo " Linking..."
        $(CC) $^ -o $(TARGET) $(LIB)

    $(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
        @mkdir -p $(BUILDDIR)
        $(CC) $(CFLAGS) $(INC) -c -o $@ $<

    clean:
        @echo " Cleaning..."; 
        $(RM) -r $(BUILDDIR) $(TARGET)

    .PHONY: clean

这是main.cpp文件:

    #include "main.hpp"

    int main(){
        return 0;
    }

头文件:main.hpp是空的,因为我真的不知道如何处理它。

1 个答案:

答案 0 :(得分:0)

文档说的是,您不能配置编译器,以便默认情况下找到dlib包含,但在项目中执行此操作。

这是有道理的,因此当您分发您的makefile时,它将适用于其他用户而无需更改编译器配置。

对于您的问题,只需更改

即可
INC     :=

通过

INC     := -Iinclude/dlib

您将能够使用已添加到项目中的dlib标题:

#include <geometry.h>

(不添加路径,它已经在编译器搜索路径中,由-I选项驱动)

有点超出了你的问题的范围,但是如果你使用dlib库中的函数(不仅仅是定义),你会在链接阶段遇到类似的问题(被调用的dlib符号的未定义符号) 。这条线可能有所帮助,但我认为它也是可疑的:

LIB     := $(shell find $(LIBDIR) -type f -name *.$(SRCEXT))

它在LIB中查找源文件(除非我弄错了,SRCEXT不能包含库扩展名)