खोज…


मेक के साथ निर्माण करते समय डिबग करने के लिए सामान्य दृष्टिकोण

मान लीजिए 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 ..


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow