2013-06-20 6 views
7

मैं इंटरनेट पर खोज कर रहा हूं लेकिन मुझे कुछ भी नहीं मिला जो मेरे प्रश्न का उत्तर देगा (या मुझे नहीं पता कि क्या खोजना है)।सीएमके परियोजना में बाहरी डीएलएल का उपयोग कैसे करें

वैसे भी यहां मेरा मुद्दा है: मैं अपने सीएमके परियोजना में तृतीय पक्ष पुस्तकालयों (.dll फ़ाइलें) का उपयोग करना चाहता हूं। लाइब्रेरी (https://github.com/pitzer/SiftGPU) जिसे मैं शामिल करना चाहता हूं वह खुला स्रोत है और यह बाइनरी में भी उपलब्ध है जिसे मैं उपयोग करना चाहता हूं और यदि यह प्रासंगिक है तो सीएमके को बिल्ड टूल के रूप में भी उपयोग करता है।

मुझे उम्मीद है कि मैं काफी स्पष्ट था।

उत्तर

9

सबसे पहले, अपनी तीसरी पार्टी लाइब्रेरी को शामिल करने के लिए अपने CMakeLists.txt को संपादित करें। आपको दो चीज़ों की आवश्यकता होगी: लिंक करने के लिए हेडर फ़ाइलों और लाइब्रेरी फ़ाइल का पथ। उदाहरण के लिए:

# searching for include directory 
find_path(SIFTGPU_INCLUDE_DIR siftgpu.h) 

# searching for library file 
find_library(SIFTGPU_LIBRARY siftgpu) 

if (SIFTGPU_INCLUDE_DIR AND SIFTGPU_LIBRARY) 
    # you may need that if further action in your CMakeLists.txt depends 
    # on detecting your library 
    set(SIFTGPU_FOUND TRUE) 

    # you may need that if you want to conditionally compile some parts 
    # of your code depending on library availability 
    add_definitions(-DHAVE_LIBSIFTGPU=1) 

    # those two, you really need 
    include_directories(${SIFTGPU_INCLUDE_DIR}) 
    set(YOUR_LIBRARIES ${YOUR_LIBRARIES} ${SIFTGPU_LIBRARY}) 
endif() 

इसके बाद, आप अन्य पुस्तकालयों के लिए भी ऐसा ही कर सकते हैं और जब हर पुस्तकालयों का पता चलता है, लक्ष्य के लिए लिंक:

target_link_libraries(yourtarget ${YOUR_LIBRARIES}) 

तो फिर तुम CMake के साथ अपनी परियोजना कॉन्फ़िगर कर सकते हैं, लेकिन जैसा कि इसमें आपके स्थापित लाइब्रेरी को खोजने का कोई जादू तरीका नहीं है, इसे कुछ भी नहीं मिलेगा, लेकिन यह दो कैश वैरिएबल बनाएगा: SIFTGPU_INCLUDE_DIR और SIFTGPU_LIBRARY

सीएमके जीयूआई का उपयोग SIFTGPU_INCLUDE_DIR है जिसमें हेडर फाइलें और SIFTGPU_LIBRARY वाली निर्देशिका को इंगित करने के लिए .lib आपकी तीसरी पार्टी लाइब्रेरी की फ़ाइल है।

प्रत्येक तृतीय पक्ष लाइब्रेरी के लिए दोहराएं, फिर से कॉन्फ़िगर करें और संकलित करें।

+2

यह कैसे cmake कहता है जहां .dll फ़ाइल रहता है? मैं केवल एक lib के लिए स्थैतिक लिंकिंग देखता हूं और हेडर फ़ाइल कहां से संकेत देता हूं। – EbbnFlow

+3

सीएमके को यह जानने की आवश्यकता नहीं है कि डीएलएल फाइलें कहां हैं। बाइनरी चलाने पर इसे संकलित करते समय उन फ़ाइलों को केवल तभी जरूरी होता है जब इसे संकलित नहीं किया जाता है। – Guillaume

संबंधित मुद्दे