2010-11-22 3 views
13

나는 CMake와 함께 Google Protobuf를 사용하고 있습니다. Linux에서 Protobuf 라이브러리는 다음에 의해 발견됩니다.CMake가 Windows에서 Google protobuf를 찾는 방법?

find_package(Protobuf REQUIRED) 

CMake는 라이브러리를 찾을 위치를 알고 있습니다. Windows에서는 어떻게 작동합니까? PROTOBUF_LIB과 같이 내가 만들어야하는 환경 변수가 있습니까? 내가 FindProtobuf.cmake에서 보았지만 필요한 것은 해결할 수 없습니다.

답변

3

Windows에서 Protobuf는 PATH 및 LIB 변수를 검색하는 find_library를 호출합니다.

+2

감사합니다. find_library도 CMAKE_INCLUDE_PATH, CMAKE_INCLUDE_PATH 및 CMAKE_LIBRARY_PATH를 검색한다는 사실을 발견했습니다. –

6

나는 또한 이것으로 고생했다. 더 명확하게.

윈도우 (7 이전 버전의 Windows에 유사한)에

: 시작 -> 제어판 -> 시스템 -> 고급 시스템 설정 -> 환경 변수 상단 패널 또는 바닥에 하나 그런

패널 (다른 사용자가 하단에 적용하려는 경우) 두 개의 새 변수를 만듭니다. 제 1 회 하나의 (a "구글"폴더를 포함해야합니다) 당신의 경로를 포함 하단에있는 점

  • CMAKE_INCLUDE_PATH입니다
  • "libprotobuf" "libprotobuf 라이트" "liteprotoc"lib 디렉토리 파일을 포함해야
  • CMAKE_LIBRARY_PATH .

변수를 만든 후 확인을 누른 다음 cmake를 다시 시작하거나 캐시를 정리합니다.

1

최신 protobuf v3 (now in beta)에는 CMake 지원 기능이 있습니다.

당신은 서브 모듈로 저장소를 protobuf 사용하고 단지 모든 protobuf 목표를 얻기 위해

add_subdiretory("third-party/protobuf/cmake") 

를 사용할 수 있습니다. 은 그럼 당신은

target_link_libraries(YourLibrary libprotobuf libprotobuf-lite libprotoc) 

또 다른 가능한 방법을 사용할 수와 protobuf하는 종속성을 추가 할 수 있습니다. protobuf의 CMake 구성하면 한 번 구축 및 protobuf 바이너리를 설치하고 개발에 여러 프로젝트에서 사용할 수 있습니다 :

git clone https://github.com/google/protobuf.git 
mkdir protobuf\tmp 
cd protobuf\tmp 
cmake ..\cmake 
cmake --build . 
cmake --build . --target install 

그런 다음이 도움이

find_package(protobuf REQUIRED 
    HINTS 
     "C:/Program Files/protobuf" 
     "C:/Program Files (x86)/protobuf") 
if (NOT PROTOBUF_FOUND) 
    message("protobuf not found") 
    return() 
endif() 

희망처럼 힌트 경로를 find_package를 사용할 수 있습니다.

0

Windows에서 cmake와 함께 protobuf v2를 사용하고 프로젝트 설정으로 빌드하는 방법을 찾았습니다. 해당 작업을 수행하는 cmake-external-packages projectprotobuf-v2 CMakeLists을 찾으십시오. 사실, ExternalProject_Add이 잘못 되었기 때문에 작성했습니다. 왜냐하면 생성 단계 대신 빌드 단계에 물건이 있기 때문입니다.

이 CMakeLists.txt는 protobuf's github releases에서 protobuf를 다운로드하고, 추출하고, target_link_libraries으로 참조를 추가해야하는 cmake 대상을 내 보냅니다.

git-subtree, git-submodule을 사용하거나이 저장소 내용을 저장소 하위 폴더로 복사하십시오.

그런 다음 add_subdiretory과 함께 사용할 패키지를 추가하십시오. protobuf를 들어, 사용

add_subdirectory(path/to/cmake-external-packages/protobuf-v2) 

Protobuf의는 path/to/cmake-external-packages/include 폴더로 복사됩니다 포함되어 있습니다. 당신은 당신의 최상위 CMakeLists에서 자신의 위치를 ​​사용자 정의 할 수 있습니다

set (EXTERNAL_PACKAGES_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/third-party/include 
    CACHE STRING "Directory for third-party include files, where include folders will be copied") 
include_directories(${EXTERNAL_PACKAGES_INCLUDE_DIR}) 

은 그냥 실행을위한 protobuf 참조 :이 도움이

add_executable(your_exe ${your_exe_sources}) 
target_link_libraries(your_exe libprotobuf libprotobuf-lite libprotoc) 

희망을.

관련 문제