cmake
स्थापित पैकेज, लाइब्रेरी और प्रोग्राम खोजें और उनका उपयोग करें
खोज…
वाक्य - विन्यास
- find_package (pkgname [संस्करण] [EXACT] [QUIET] [आवश्यक])
- शामिल हैं (FindPkgConfig)
- pkg_search_module (उपसर्ग [आवश्यक] [QUIET] pkgname [otherpit ...))
- pkg_check_modules (उपसर्ग [आवश्यक] [QUIET] pkgname [otherpit ...))
पैरामीटर
पैरामीटर | विवरण |
---|---|
संस्करण (वैकल्पिक) | एक प्रमुख संख्या द्वारा परिभाषित पैकेज का न्यूनतम संस्करण और वैकल्पिक रूप से एक मामूली, पैच और ट्वीक नंबर, प्रमुख major.minor.pex.tweak में। |
सटीक (वैकल्पिक) | निर्दिष्ट करें कि संस्करण में निर्दिष्ट version पाया जाने वाला सटीक संस्करण है |
आवश्यक (वैकल्पिक) | स्वचालित रूप से एक त्रुटि फेंकता है और पैकेज नहीं मिलने पर प्रक्रिया को रोक देता है |
QUIET (वैकल्पिक) | फ़ंक्शन मानक आउटपुट में कोई संदेश नहीं भेजेगा |
टिप्पणियों
find_package
तरीका सभी प्लेटफ़ॉर्म पर संगत है, जबकिpkg-config
तरीका केवल यूनिक्स जैसे प्लेटफार्मों पर उपलब्ध है, जैसे लिनक्स और OSX।का पूरा विवरण
find_package
कई मापदंडों और विकल्प में पाया जा सकता पुस्तिका ।भले ही कई वैकल्पिक मापदंडों को निर्दिष्ट करना संभव है, जैसे कि पैकेज का संस्करण, नहीं सभी खोजें मॉड्यूल उन सभी मापदंडों का ठीक से उपयोग करता है। यदि कोई अपरिभाषित व्यवहार होता है, तो सीएमके के स्थापित पथ में मॉड्यूल को ढूंढना और उसके व्यवहार को ठीक करना या समझना आवश्यक हो सकता है।
Find_package और Find का उपयोग करें .cmake मॉड्यूल
CMake के साथ संस्थापित संकुलों को खोजने का डिफ़ॉल्ट तरीका है find_package
फ़ंक्शन के साथ संयोजन में Find<package>.cmake
फ़ाइल का उपयोग करना। फ़ाइल का उद्देश्य पैकेज के लिए खोज नियमों को परिभाषित करना और विभिन्न चर सेट करना है, जैसे <package>_FOUND
, <package>_INCLUDE_DIRS
और <package>_LIBRARIES
।
कई Find<package>.cmake
फ़ाइल पहले से ही CMake में डिफ़ॉल्ट रूप से परिभाषित हैं। हालाँकि, यदि आपके लिए आवश्यक पैकेज के लिए कोई फ़ाइल नहीं है, तो आप हमेशा अपना स्वयं का लिख सकते हैं और इसे ${CMAKE_SOURCE_DIR}/cmake/modules
(या किसी अन्य निर्देशिका में यदि CMAKE_MODULE_PATH
ओवरराइड किया गया है) के अंदर रख सकते हैं)
डिफ़ॉल्ट मॉड्यूल की एक सूची मैनुअल (v3.6) में पाई जा सकती है। प्रोजेक्ट में उपयोग किए गए CMake के संस्करण के अनुसार मैनुअल की जांच करना आवश्यक है अन्यथा लापता मॉड्यूल हो सकता है। cmake --help-module-list
साथ स्थापित मॉड्यूल को cmake --help-module-list
भी संभव है।
Github पर FindSDL2.cmake
लिए एक अच्छा उदाहरण है
यहां एक मूल CMakeLists.txt
जिसे SDL2 की आवश्यकता होगी:
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules")
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
Pkg_search_module और pkg_check_modules का उपयोग करें
यूनिक्स-जैसे ऑपरेटिंग सिस्टम पर, <package>.pc
फ़ाइल प्रदान करने वाले पैकेजों को खोजने और कॉन्फ़िगर करने के लिए pkg-config
प्रोग्राम का उपयोग करना संभव है।
का उपयोग करने के pkg-config
, यह कॉल के लिए आवश्यक है include(FindPkgConfig)
एक में CMakeLists.txt
। फिर, 2 संभावित कार्य हैं:
-
pkg_search_module
, जो पैकेज की जाँच करता है और पहले उपलब्ध का उपयोग करता है। -
pkg_check_modules
, जो सभी संबंधित पैकेजों की जांच करते हैं।
यहाँ एक मूल CMakeLists.txt
जो 2.0.1 से ऊपर या इसके संस्करण के साथ SDL2 खोजने के लिए pkg-config
का उपयोग करता है:
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2>=2.0.1)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})