2015-12-16 16 views
5

CMAKE_BUILD_TYPE=Release-DNDEBUG örtülü ima ediyor mu?CMAKE_BUILD_TYPE = Sürümde -DNDEBUG ifadesi var mı?

Aksi takdirde: Bu imalamanın gerçekleşmesini beklemek makul değil mi?

Ben CMake kodu aşağıdaki benim CMakeLists.txt gereksiz olup olmadığını bilmek istiyorum:

if (NOT CMAKE_BUILD_TYPE MATCHES Debug) 
    add_definitions(-DNDEBUG) 
endif() 
+0

Bunu kontrol ettim ve * CMake * '-DNDEBUG' bayrağını eklediğinde ortaya çıkıyor, ancak hala sorunludur çünkü [CMake belgeleri] (https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE. html) ** CMAKE_BUILD_TYPE = Hata Ayıkla seçeneği mevcut olduğunda '-DNDEBUG' bayrağı eklendiğinde açıkça belirtilmiyor. Belgelenmemiş davranışa dayanarak kod yazmayı tercih etmeyi tercih ederim çünkü gelecekte CMake sürümlerinde değişebilir (ancak olası sonuçlar küçük olabilir). –

+1

Yani anlamında = = başlıkta? Ben kesinlikle hata ayıklama ** NOT ** NDEBUG 'tanımlamak için inşa beklerdim. – immibis

+0

@immibis - teşekkürler. Tabii ki bir yazım hatasıydı. Sorumu düzenledim. +1 –

cevap

1

Evet, CMake tarafından ayarlanır. CMake kodunun içine girme, bir dizi derleyici için ayarlandığını ortaya koymaktadır. Muhtemelen, sadece bu bayrağı kabul eden bu derleyiciler için hazırladılar. İşte GCC ilgili satırlardan birini:

Modules/Compiler/GNU.cmake: set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") 

Fakat birçok proje başlangıç ​​ayarı koruyarak ve aynı zamanda kullanıcının tanımlarını üzerine yazmadan salım/ayıklama bayrakları üzerine unutmayın.

İlgili konular