2010-11-22 9 views
13

मैं सीएमके के साथ Google प्रोटोबफ का उपयोग कर रहा हूं। लिनक्स पर Protobuf पुस्तकालय द्वारा पाया जाता है:सीएमके को विंडोज़ पर Google प्रोटोबफ कैसे ढूंढें?

find_package(Protobuf REQUIRED) 

CMake जानता पुस्तकालय देखने के लिए जहां। विंडोज़ में काम करने के लिए मुझे यह कैसे मिलता है? क्या कोई पर्यावरण चर है जो मुझे बनाना चाहिए, जैसे PROTOBUF_LIB? मैंने FindProtobuf.cmake में देखा है लेकिन आवश्यकतानुसार काम नहीं कर सकता है।

उत्तर

3

विंडोज़ पर प्रोटोबफ find_library कॉल करता है जो आपके पाथ और एलआईबी चर खोजेगा।

+2

धन्यवाद, मैंने तब से पता चला है कि find_library भी CMAKE_INCLUDE_PATH, CMAKE_INCLUDE_PATH और CMAKE_LIBRARY_PATH खोजता है। –

6

मैंने भी इसके साथ संघर्ष किया। अधिक स्पष्ट होने के लिए।

विंडोज (7, पुराने खिड़कियों पर समान) पर: प्रारंभ -> नियंत्रण कक्ष -> सिस्टम -> उन्नत सिस्टम सेटिंग्स -> पर्यावरण चर

तो या तो शीर्ष पैनल या तल पर पैनल (यदि आप इसे अन्य उपयोगकर्ताओं पर लागू करना चाहते हैं तो इसे नीचे करें), दो नए चर बनाएं। 1 एक

  • CMAKE_INCLUDE_PATH जो (क "गूगल" फ़ोल्डर को शामिल करना चाहिए) आपके पथ शामिल के तल पर इशारा करता है
  • CMAKE_LIBRARY_PATH जो "libprotobuf" "libprotobuf-लाइट" "liteprotoc" उदारीकरण फ़ाइलों को शामिल करना चाहिए ।

वेरिएबल्स बनाने के बाद ठीक दबाएं और फिर cmake (या कैश साफ़ करें) फिर से शुरू करें।

1

नवीनतम protobuf v3 (now in beta) में बॉक्स के बाहर सीएमके का समर्थन है।

आप submodule के रूप में भंडार Protobuf इस्तेमाल कर सकते हैं और सिर्फ

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

उपयोग करने वाले सभी Protobuf लक्ष्य प्राप्त करने के लिए। तो फिर तुम Protobuf को

target_link_libraries(YourLibrary libprotobuf libprotobuf-lite libprotoc) 

एक और संभव तरीके के साथ उपलब्ध है निर्भरता जोड़ सकते हैं। Protobuf के CMake विन्यास के साथ आप का निर्माण कर सकते हैं और एक बार Protobuf binaries स्थापित करने और अपने विकास में कई परियोजनाओं भर में उन्हें इस्तेमाल:

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

मुझे विंडोज़ पर सेमेक के साथ प्रोटोबफ वी 2 का उपयोग करने और अपनी परियोजना सेटिंग्स के साथ बनाने का तरीका मिला। कृपया, cmake-external-packages project और protobuf-v2 CMakeLists देखें जो नौकरी करते हैं। वास्तव में, मैंने इसे लिखा क्योंकि ExternalProject_Add गलत है (क्योंकि पीढ़ी चरण के बजाय निर्माण चरण में सामान करता है)।

यह CMakeLists.txt protobuf's github releases से प्रोटोबफ डाउनलोड करेगा, निकालें और सेमीकेक लक्ष्य को उत्सर्जित करेगा जिसे आपको target_link_libraries के साथ संदर्भ जोड़ना चाहिए।

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) 

आशा इस मदद करता है।