2010-11-22 12 views
13

Estoy usando Google Protobuf con CMake. En Linux, la biblioteca Protobuf se encuentra en:¿Cómo hacer que CMake encuentre google protobuf en Windows?

find_package(Protobuf REQUIRED) 

CMake sabe dónde buscar la biblioteca. ¿Cómo puedo lograr que esto funcione en Windows? ¿Hay alguna variable de entorno que deba crear, como PROTOBUF_LIB? He buscado en FindProtobuf.cmake pero no puedo determinar qué se necesita.

Respuesta

3

Protobuf en Windows llama a find_library que buscará las variables PATH y LIB.

+2

Gracias, he descubierto desde entonces que find_library busca también CMAKE_INCLUDE_PATH, CMAKE_INCLUDE_PATH y CMAKE_LIBRARY_PATH. –

6

También tuve problemas con esto. Para ser más claro.

En Windows (7, de forma similar en las ventanas de edad avanzada): Inicio -> Panel de control -> Sistema -> Configuración avanzada del sistema -> Variables de entorno

A continuación, ya sea en el panel superior o inferior panel (si desea que se aplique a otros usuarios, hágalo en la parte inferior), cree dos variables nuevas. El primero es uno

  • CMAKE_INCLUDE_PATH que apunta en la parte inferior de la ruta de inclusión (debe contener una carpeta "Google")
  • CMAKE_LIBRARY_PATH que debe contener "libprotobuf" "libprotobuf-lite" "" liteprotoc .lib .

Después de crear las variables, presione OK y luego reinicie cmake (o limpie la caché).

1

El más reciente protobuf v3 (now in beta) tiene soporte CMake fuera de la caja.

Usted podría utilizar protobuf repositorio como submódulo y sólo tiene que utilizar

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

para conseguir todos los objetivos protobuf. continuación, puede añadir la dependencia a protobuf con

target_link_libraries(YourLibrary libprotobuf libprotobuf-lite libprotoc) 

Otra manera posible está disponible. Con la configuración CMake de protobuf se puede construir e instalar los binarios protobuf una vez y utilizarlos a través de varios proyectos en su desarrollo:

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

continuación, puede utilizar find_package con las rutas de sugerencia como

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

Espero que esto ayude.

0

Encontré la manera de usar protobuf v2 con cmake en Windows y compilarlo con la configuración de tu proyecto. Por favor, intente mirar cmake-external-packages project y protobuf-v2 CMakeLists que hacen el trabajo. De hecho, lo escribí porque ExternalProject_Add está mal (porque hace cosas en fase de construcción en lugar de fase de generación).

Este CMakeLists.txt descargará protobuf de protobuf's github releases, extraerá y emitirá cmake objetivos a los que debe agregar referencia con target_link_libraries.

Use git-subtree, git-submodule o simplemente copie este contenido del repositorio en su subcarpeta del repositorio.

A continuación, agregue los paquetes que desea utilizar con add_subdiretory. Para protobuf, utilice:

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

Protobuf de incluye se copiará en la carpeta path/to/cmake-external-packages/include. Puede personalizar su ubicación en sus CMakeLists de nivel superior:

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}) 

apenas referencia protobuf para su ejecutable:

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

Espero que esto ayude.

Cuestiones relacionadas