2011-12-21 13 views
16

Projelerimi Windows (Visual Studio) ve Linux makinelerinde (gcc) oluşturmak için CMake kullanıyorum. Ne derleyici tanımı CKağıt "Debug" içindeki tüm platformlarda kullanılabilir türünü oluşturmak: Ben#ifdef DEBUG ile CMake platformdan bağımsız

#ifdef DEBUG 
//some logging here 
#endif 

soru olduğu gibi, "sadece ayıklama" gibi bazı kod işaretlemek istiyorum? DEBUG mevcut değil gibi görünüyor. (Ben yapı tipi ayıklama olduğu zaman günlük ya da her türlü sahip olmak istiyorum.)

+0

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

cevap

13

Ben kendi eklemek öneririm. Cmake sembolü CMAKE_C_FLAGS_DEBUG yalnızca Debug modunda kullanılan bayraklar içerebilir. Örneğin:

set(CMAKE_C_FLAGS_DEBUG "-DMY_DEBUG") 

(Belki görsel stüdyo için "/DMY_DEBUG" kullanması gerekir.)

+0

Kullanıcı adınız için sizi kışkırtmaktan hoşlanıyorum, ancak bunun yerine reddedildiğim için yaptığım işin yeniden yapılmasının bir hayranı değilim çünkü araçlarınız tarafından ve diğer cevaba göre, 'NDEBUG' CMake tarafından tanımlanmıştır, bu yüzden tercih edilir. –

+2

'NDEBUG', 'assert()': s'nin aktif olup olmamasını kontrol etmek için C standardı tarafından tanımlanan bir semboldür. Şahsen, başka bir şey için kullanmanız gerektiğini düşünmüyorum. (Kullanıcı adıyla ilgili iltifat için teşekkür ederiz.) – Lindydancer

+0

Ayrıca 'NDEBUG' kullanmaya da karşıyım. FWIW, makro tanımlarını eklemenin doğru yolu (şimdi, en azından) add_definitions (-DMY_DEBUG) 'dır. [Belgeler] (http://www.cmake.org/cmake/help/v3.0/command/add_definitions.html), önek olarak '-' veya'/'tanımasını önerir, bu nedenle işletim sistemi agnostik olmalıdır. –

61

CKağıt varsayılan olarak CMAKE_C_FLAGS_ {RELEASE, MINSIZEREL} olarak -DNDEBUG ekler. Yani, #ifndef NDEBUG'u kullanabilirsiniz.

+7

Çift olumsuz, kötü :) – entheh