cmake
टेस्ट और डिबग
खोज…
मेक के साथ निर्माण करते समय डिबग करने के लिए सामान्य दृष्टिकोण
मान लीजिए make
विफल रहता है:
$ make
निष्पादित किए गए आदेशों को देखने के make VERBOSE=1
बजाय इसे लॉन्च करें। फिर सीधे लिंकर या कंपाइलर कमांड को चलाएं जो आप देखेंगे। आवश्यक झंडे या पुस्तकालयों को जोड़कर इसे काम करने की कोशिश करें।
फिर पता करें कि क्या बदलना है, इसलिए CMake खुद कंपाइलर / लिंकर कमांड के लिए सही तर्क दे सकता है:
- सिस्टम में क्या परिवर्तन करना है (कौन सी लाइब्रेरी स्थापित करनी है, कौन से संस्करण, स्वयं सीएमके के संस्करण)
- यदि पिछला विफल रहता है, तो सीएमके को पास करने के लिए कौन सा वातावरण सेट या मापदंडों को बदलता है
- अन्यथा, प्रोजेक्ट के
CMakeLists.txt
में क्या बदलना है याFindSomeLib.cmake
जैसी लाइब्रेरी डिटेक्शन स्क्रिप्ट्स
इसमें मदद करने के लिए, message(${MY_VARIABLE})
को CMakeLists.txt
या *.cmake
में डिबग वैरिएबल में कॉल करें जिसका आप निरीक्षण करना चाहते हैं।
सीएमके को वर्बोज़ मेकफाइल्स बनाने दें
एक बार सीएमके प्रोजेक्ट project()
माध्यम से इनिशियलाइज़ हो जाने के बाद, परिणामी बिल्ड स्क्रिप्ट की आउटपुट वर्बोसिटी को इसके माध्यम से समायोजित किया जा सकता है:
CMAKE_VERBOSE_MAKEFILE
प्रोजेक्ट को कॉन्फ़िगर करते समय यह चर CMake कमांड लाइन के माध्यम से सेट किया जा सकता है:
cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>
GNU के लिए इस वेरिएबल का वही प्रभाव है जो रनिंग make VERBOSE=1
।
डीबग find_package () त्रुटियाँ
नोट: दिखाए गए CMake त्रुटि संदेशों में पहले से ही "गैर-मानक" लाइब्रेरी / टूल इंस्टॉलेशन पथ के लिए फिक्स शामिल हैं। निम्नलिखित उदाहरण सिर्फ अधिक find_package()
आउटपुट प्रदर्शित करते हैं।
CMake आंतरिक रूप से समर्थित पैकेज / मॉड्यूल
यदि निम्न कोड ( प्रश्न में अपने मॉड्यूल के साथ FindBoost
मॉड्यूल को बदलें)
cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)
find_package(Boost REQUIRED)
कुछ त्रुटि देता है
CMake Error at [...]/Modules/FindBoost.cmake:1753 (message):
Unable to find the requested Boost libraries.
Unable to find the Boost header files. Please set BOOST_ROOT to the root
directory containing Boost or BOOST_INCLUDEDIR to the directory containing
Boost's headers.
और आप सोच रहे हैं कि इसने पुस्तकालय को खोजने की कोशिश की, आप जाँच सकते हैं कि क्या आपके पैकेज में _DEBUG
विकल्प है जैसे Boost
मॉड्यूल में अधिक वर्बोज़ आउटपुट प्राप्त करने के लिए है
$ cmake -D Boost_DEBUG=ON ..
CMake सक्षम पैकेज / पुस्तकालय
यदि निम्नलिखित कोड ( प्रश्न में अपने पुस्तकालय के साथ Xyz
को बदलें)
cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)
find_package(Xyz REQUIRED)
जैसे कुछ त्रुटि देता है
CMake Error at CMakeLists.txt:4 (find_package):
By not providing "FindXyz.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Xyz", but
CMake did not find one.
Could not find a package configuration file provided by "Xyz" with any of
the following names:
XyzConfig.cmake
xyz-config.cmake
Add the installation prefix of "Xyz" to CMAKE_PREFIX_PATH or set "Xyz_DIR"
to a directory containing one of the above files. If "Xyz" provides a
separate development package or SDK, be sure it has been installed.
और आप सोच रहे हैं कि पुस्तकालय को खोजने की कोशिश में, आप अधिक CMAKE_FIND_DEBUG_MODE
आउटपुट प्राप्त करने के लिए CMAKE_FIND_DEBUG_MODE
वैश्विक चर का उपयोग कर सकते हैं
$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..