2012-05-09 14 views
11

क्या कोई चर है जिसे मैं cmake में उपयोग कर सकता हूं ताकि इसे कार्य करने के लिए -q विकल्प पारित किया जा सके? यह अच्छा होगा क्योंकि मेरे पास एक बहुत ही मॉड्यूलर बिल्ड है जो सेमेक्स आउटपुट के साथ गन्दा हो जाता है। मैं इसे सी ++ प्रोजेक्ट में उपयोग कर रहा हूं।कोमेक को चुप रहने के लिए बताएं

उत्तर

8

कोई वैरिएबल नहीं है जो मुझे पता है। हालांकि, अगर आप कुछ हद तक उत्पादन को नियंत्रित करने के अपने उच्चतम स्तर के CMakeLists.txt (project कॉल करने से पहले) की शुरुआत करने के लिए निम्न हैक जोड़ सकते हैं:

function(message) 
    list(GET ARGV 0 MessageType) 
    if(MessageType STREQUAL FATAL_ERROR OR 
    MessageType STREQUAL SEND_ERROR OR 
    MessageType STREQUAL WARNING OR 
    MessageType STREQUAL AUTHOR_WARNING) 
    list(REMOVE_AT ARGV 0) 
    _message(${MessageType} "${ARGV}") 
    endif() 
endfunction() 

यह उपरोक्त CMake के अंतर्निहित message आदेश और सभी STATUS को दबा और अवांछित संदेश, सही तरीके से आउटपुट के लिए अधिक महत्वपूर्ण प्रकार छोड़कर।

उदा। एक WARNING संदेश

CMake Warning at CMakeLists.txt:14 (message): 
    This is a dummy warning message. 

से करने के लिए

CMake Warning at CMakeLists.txt:8 (_message): 
    This is a dummy warning message. 
Call Stack (most recent call first): 
    CMakeLists.txt:14 (message) 

नोट बदल जाएगा कि वास्तविक रेखा जहां चेतावनी संदेश होने से जनरेट किया गया था बल्कि कॉल स्टैक में सूचीबद्ध है आउटपुट संदेश की पहली पंक्ति।

अंत में, इसका सारांश आउटपुट पर कोई प्रभाव नहीं पड़ता है जो कॉन्फ़िगरेशन प्रयास की सफलता या विफलता को इंगित करता है।

+0

कूल! तो आप उस संदेश का कोई भी प्रकार कर सकते थे जिसे आप चाहते थे? – alexmherrmann

+0

क्या कॉल स्टैक स्टफ को रोकने का कोई तरीका है? जवाब के लिए धन्यवाद! – alexmherrmann

+0

@alexhairyman वास्तव में नहीं, लेकिन आपको त्रुटि/चेतावनी के वास्तविक स्रोत का पता लगाने के लिए इसकी आवश्यकता है। यदि आप त्रुटियों/चेतावनियों को भी देखना नहीं चाहते हैं, तो आप हमेशा 'फ़ंक्शन' बॉडी के अंदर सबकुछ निकाल सकते हैं ताकि 'संदेश' नो-ऑप बन जाए। या बस 'if' में त्रुटि प्रकार छोड़ दें और चेतावनियों को अनदेखा करें। – Fraser

3

सेमीकेक 3.1 के रूप में, CMAKE_INSTALL_MESSAGE सेटिंग भी बहुत उपयोगी है। उदाहरण के लिए, set(CMAKE_INSTALL_MESSAGE LAZY)-- Up-to-date: संदेशों को छोड़ देगा।

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