2016-08-10 3 views
0

dllib 라이브러리를 내 C++ 프로젝트에서 작동시키고 내 스크립트의 헤더 파일에있는 내 Makefile 및 #include < ...과 관련된 작업을 모릅니다. 헤더 파일과 스크립트를 src 디렉토리에 두었습니다. 심볼릭 링크가 dlib 라이브러리에 만들어졌으며 링크는 include 디렉토리에 있습니다 (아래 폴더 구조 참조). dlib 웹 사이트에C++ 프로젝트에 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은 다음과 같습니다

#include "main.hpp" 

    int main(){ 
     return 0; 
    } 

그리고 헤더 파일 :이 MAIN.CPP 파일입니다

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 [email protected] $< 

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

    .PHONY: clean 

: main.hpp는 비어 있습니다. 왜냐하면 저는 정말로 그걸로 무엇을해야할지 모르겠습니다.

답변

0

설명서에서 말하는 것은 컴파일러를 구성하여 dlib가 기본적으로 포함되지만 프로젝트에서 수행하도록 구성하면 안된다는 것입니다.

makefile을 배포 할 때 컴파일러 구성을 변경하지 않고도 다른 사용자에게 유용합니다.

#include <geometry.h> 

:

문제에 대한

, 단지 당신이 그런 식으로 프로젝트에 추가 한 dlib 헤더를 사용할 수 있습니다

INC  := -Iinclude/dlib 

에 의해

INC  := 

변경 (경로를 추가하지 마십시오. 이미 컴파일러 검색 경로에 있으며, -I 옵션으로 구동됩니다.)

질문 범위를 벗어나지 만, dlib 라이브러리 (정의뿐만 아니라)의 함수를 사용하는 경우 링크 단계에서 비슷한 문제가 발생합니다 (dlib 심볼에 대해 정의되지 않은 기호). 그 선은 도움이 될 수 있지만, 나는 그것을 의심스러운 너무 생각 :

+0

은 내가 INC 라인을 변경하고 댓글을 달았 (내가 틀리지 않는 한, SRCEXT 라이브러리 확장을 포함 할 수 없습니다) 그것은 LIB에서 소스 파일을 찾습니다

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

LIB 라인. #LIB \t \t : 나는 내 헤더 파일에 다음을 추가 = -Iinclude/dlib/ 또한 : = $ INC \t \t (. 쉘은 $ (LIBDIR) 타입 F -name * $ (SRCEXT를) 찾을 수) #include <../include/dlib/ geometry.h> 연결 단계에서 문제가 무엇인지 알 수 없습니까? ("No such file or directory"라고 말하지 않음) – user3346727

+0

내 편집을 확인하고 결과를 알려주십시오. 컴파일하고 링크 문제가 있으면 게시하십시오. –

+0

네, 고마워요! Ther은 여전히 ​​해결 된 유일한 문제였습니다. 문제는 dlib 폴더가 포함되었다는 것입니다. 이것은 (적어도 dlib의 경우) 잘못되어 오류가 발생합니다. 지금 내가 한 일은 다음과 같습니다. INC : = -include/dlib 및 #include . 이 지금 작동합니다. 여러 번 감사드립니다! – user3346727