2011-12-21 14 views
16

से स्वतंत्र सीएमके के साथ मैं विंडोज़ (विजुअल स्टूडियो) के साथ-साथ लिनक्स मशीनों (जीसीसी) पर अपनी परियोजनाओं के निर्माण के लिए सीएमके का उपयोग कर रहा हूं। क्या संकलक परिभाषा CMake "डीबग" में सभी प्लेटफार्मों पर उपलब्ध है प्रकार का निर्माण: मैं#ifdef DEBUG प्लेटफार्म

#ifdef DEBUG 
//some logging here 
#endif 

सवाल यह है कि के साथ की तरह, "केवल डिबगिंग" के रूप में कुछ कोड को चिह्नित करना चाहते? डेबग मौजूद नहीं है। (मैं लॉगिंग करना चाहता हूं या जो कुछ भी जब निर्माण प्रकार डीबग होता है।)

+0

http://stackoverflow.com/a/7725055/560648 –

उत्तर

13

मैं सुझाव दूंगा कि आप अपना खुद का जोड़ लें। सेमेक प्रतीक CMAKE_C_FLAGS_DEBUG में केवल डीबग मोड में उपयोग किए जाने वाले झंडे हो सकते हैं। उदाहरण के लिए:

set(CMAKE_C_FLAGS_DEBUG "-DMY_DEBUG") 

(हो सकता है, आप दृश्य स्टूडियो के लिए "/DMY_DEBUG" का उपयोग करना होगा।)

+0

मैं आपको अपने उपयोगकर्ता नाम के लिए अपवर्तित करने का लुत्फ उठा रहा हूं, लेकिन इसके बजाय मैं डाउनवॉटेड हूं क्योंकि मैं फिर से काम करने का प्रशंसक नहीं हूं जो आपके लिए पहले से ही किया जा चुका है आपके टूल्स द्वारा, और दूसरे उत्तर के अनुसार, 'एनडीईबीयूजी' को सीएमके द्वारा परिभाषित किया गया है, इसलिए यह बेहतर है। –

+2

'एनडीईबीयूजी 'सी मानक द्वारा परिभाषित एक प्रतीक है जो नियंत्रित करने के लिए है कि' assert()' s सक्रिय होना चाहिए या नहीं। व्यक्तिगत रूप से, मुझे नहीं लगता कि आपको इसे किसी और चीज़ के लिए उपयोग करना चाहिए। (उपयोगकर्ता नाम के बारे में तारीफ के लिए धन्यवाद।) – Lindydancer

+0

मैं भी 'एनडीईबीयूजी' का उपयोग करने के खिलाफ हूं। एफडब्ल्यूआईडब्ल्यू, मैक्रो परिभाषाओं को जोड़ने का सही तरीका (अब, कम से कम) 'add_definitions (-DMY_DEBUG) 'है। [प्रलेखन] (http://www.cmake.org/cmake/help/v3.0/command/add_definitions.html) सुझाव देता है कि यह उपसर्ग के रूप में '-' या'/'को पहचानता है, इसलिए यह ओएस अज्ञेयवादी होना चाहिए। –

61

CMake CMAKE_C_FLAGS_ {विज्ञप्ति, MINSIZEREL} डिफ़ॉल्ट रूप से करने के लिए -DNDEBUG कहते हैं। तो, आप #ifndef NDEBUG का उपयोग कर सकते हैं।

+7

डबल नकारात्मक बुरा है :) – entheh

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