2012-04-24 3 views
0

다른 디렉토리에 다른 소스 파일에서 메이크 파일로 컴파일 할 수 없습니다 leveldb.hpp ". leveldb.cpp에 "leveldb.hpp"가 포함되어 있습니다.내가이 디렉토리 구조와 C++ 프로젝트를 가지고

내 Makefile은 지금까지입니다. $ LEVELDB는 Google의 leveldb 라이브러리에 대한 경로이며, 내 leveldb.hpp 및 cpp 파일과 다릅니다. 사용자 정의 클래스) :

CC=g++ 
LEVELDB=/route/to/Googles/library/leveldb 
BOOST=/route/to/boost/cpp-netlib-0.9.2 

DATABASE=/route/to/my/project/src/database 

CFLAGS=-I$(LEVELDB)/include -I$(BOOST) -Wall -O2 
LDFLAGS=-L$(LEVELDB) -lleveldb -lpthread -lboost_system -lboost_thread -pthread 

all:server 

server: server.cpp database/leveldb.cpp 
    $(CC) -o [email protected] $(CFLAGS) -I$(DATABASE) $< $(LDFLAGS) -L$(DATABASE) 

컴파일 할 수 없습니다. 그것은 나에게 "LevelDB :: LevelDB (std :: basic_string, std :: allocator>) '에 대한 정의되지 않은 참조를 제공합니다. Makefile 때문에 컴파일 오류입니다. 왜냐하면 모든 것을 가지고 다 잘 작동했기 때문입니다. 하나의 단일 소스 파일.

많은 도움을 주시면 감사하겠습니다. 당신이 make (또는 make all 또는 make server) 또는 make servidor하려고하는 여부를

감사합니다 :)

+0

'servidor'는 cpp 파일 대신'server.o'와 같은 객체 파일에 의존해서는 안됩니까? .cpp를 .o로 바꾸고 make가 개체 파일을 생성합니다. –

+0

데이터베이스 디렉토리에 무언가를 만들고 있습니까? '-L $ (DATABASE)' – juanchopanza

+1

Make는 실행되는 모든 것에 대한 정확한 명령 행 호출을 출력하므로 GCC 호출 방법을 볼 수 있어야한다. 그것이 GCC가 호출 될 것을 기대하는 것과 일치하지 않으면, 그 때까지 Makefile을 수정하십시오. –

답변

2

당신은 우리를 말하지 않았다. 어느 쪽이든 문제는 leveldb 정의를 대상에 연결하지 않는다는 것입니다. 이 규칙

: 사용자가 제 필수 수단 $< 자동 변수를 사용하는

servidor: server.cpp database/leveldb.cpp 
    $(CC) -o [email protected] $(CFLAGS) -I$(DATABASE) $< $(LDFLAGS) -L$(DATABASE) 

(server.cpp). $^을 사용해야합니다. 즉, 모두 사전 요구 사항 (server.cpp database/leveldb.cpp)을 사용해야합니다.

당신이 make 또는 make all 또는 make server, leveldb.cpp에 대한 언급을하지 않습니다 기본 규칙을 사용하여 server.cpp에서 server를 구축하려고 시도합니다 경우

. 규칙을 "all : servidor"로하고 싶지 않습니까?

+1

+1 빠진 부분은 [참조 자료 링크]입니다 (http://www.gnu.org/software/make/manual/make.html#Automatic-Variables). –

+0

죄송합니다. 오류가 있습니다. "Servidor"는 "서버"입니다. 나는 이미 그것을 고쳤다. 나는 server.cpp를 만들고 싶다. –

+0

@ Robᵩ, 네 말이 맞아. 고마워. – Beta

관련 문제