सबसे पहले, अपनी तीसरी पार्टी लाइब्रेरी को शामिल करने के लिए अपने 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
आपकी तीसरी पार्टी लाइब्रेरी की फ़ाइल है।
प्रत्येक तृतीय पक्ष लाइब्रेरी के लिए दोहराएं, फिर से कॉन्फ़िगर करें और संकलित करें।
यह कैसे cmake कहता है जहां .dll फ़ाइल रहता है? मैं केवल एक lib के लिए स्थैतिक लिंकिंग देखता हूं और हेडर फ़ाइल कहां से संकेत देता हूं। – EbbnFlow
सीएमके को यह जानने की आवश्यकता नहीं है कि डीएलएल फाइलें कहां हैं। बाइनरी चलाने पर इसे संकलित करते समय उन फ़ाइलों को केवल तभी जरूरी होता है जब इसे संकलित नहीं किया जाता है। – Guillaume