2010-11-22 5 views
13

Tôi đang sử dụng Google Protobuf với CMake. Trên Linux, thư viện Protobuf được tìm thấy bởi:Làm thế nào để làm cho CMake tìm thấy google protobuf trên các cửa sổ?

find_package(Protobuf REQUIRED) 

CMake biết nơi cần tìm thư viện. Làm thế nào mặc dù tôi có được điều này để làm việc trong Windows? Có biến môi trường nào tôi nên tạo, chẳng hạn như PROTOBUF_LIB? Tôi đã xem xét FindProtobuf.cmake nhưng không thể tìm ra những gì được yêu cầu.

Trả lời

3

Protobuf trên windows gọi find_library sẽ tìm kiếm biến PATH và LIB của bạn.

+2

Cảm ơn, tôi đã phát hiện ra rằng find_library cũng tìm kiếm CMAKE_INCLUDE_PATH, CMAKE_INCLUDE_PATH và CMAKE_LIBRARY_PATH. –

6

Tôi cũng phải vật lộn với điều này. Để rõ ràng hơn.

Trên Windows (7, tương tự như trên các cửa sổ trở lên): Start -> Control Panel -> System -> System Advanced Settings -> Environment Variables

Sau đó một trong hai trên bảng điều khiển phía trên hoặc phía dưới bảng điều khiển (nếu bạn muốn nó áp dụng cho những người dùng khác làm điều đó ở phía dưới), hãy tạo hai biến mới. Một 1st là

  • CMAKE_INCLUDE_PATH mà chỉ ở dưới cùng của bao gồm bạn đường dẫn (nên chứa một thư mục "google")
  • CMAKE_LIBRARY_PATH mà nên chứa "libprotobuf" "libprotobuf-lite" "liteprotoc" File lib .

Sau khi bạn tạo các biến nhấn OK và sau đó khởi động lại cmake (hoặc xóa bộ nhớ cache).

1

Mới nhất protobuf v3 (now in beta) có hỗ trợ CMake ra khỏi hộp.

Bạn có thể sử dụng protobuf kho như submodule và chỉ sử dụng

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

để có được tất cả các mục tiêu protobuf. Sau đó, bạn có thể thêm phụ thuộc vào Protobuf với

target_link_libraries(YourLibrary libprotobuf libprotobuf-lite libprotoc) 

Một cách có thể có sẵn. Với cấu hình CMake protobuf của bạn có thể xây dựng và cài đặt mã nhị phân protobuf một lần và sử dụng chúng trên một số dự án phát triển của bạn:

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

Sau đó, bạn có thể sử dụng find_package với đường dẫn gợi ý như

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

Hope this helps.

0

Tôi đã tìm cách sử dụng protobuf v2 với cmake trên Windows và xây dựng nó với cài đặt dự án của bạn. Vui lòng thử xem cmake-external-packages projectprotobuf-v2 CMakeLists để thực hiện công việc. Trong thực tế, tôi đã viết nó bởi vì ExternalProject_Add là sai (vì các công cụ trong giai đoạn xây dựng thay vì giai đoạn thế hệ).

CMakeLists.txt này sẽ tải xuống protobuf từ protobuf's github releases, trích xuất và phát ra các mục tiêu cmake mà bạn nên thêm tham chiếu đến với target_link_libraries.

Sử dụng git-subtree, git-submodule hoặc chỉ sao chép nội dung kho lưu trữ này vào thư mục con của kho lưu trữ của bạn.

Sau đó, thêm các gói bạn muốn sử dụng với add_subdiretory. Đối với protobuf, sử dụng:

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

Bao gồm của Protobuf sẽ được sao chép vào thư mục path/to/cmake-external-packages/include. Bạn có thể tùy chỉnh vị trí của nó trong CMakeLists cấp cao nhất của bạn:

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

Chỉ cần tham khảo protobuf cho thực thi của bạn:

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

Hope this helps.