2011-12-21 171 views
16

我使用CMake在Windows(Visual Studio)以及Linux機器(gcc)上構建我的項目。我想和#ifdef用CMake獨立於平臺的DEBUG

#ifdef DEBUG 
//some logging here 
#endif 

是個問題,以紀念一些代碼爲「僅調試」,如:什麼編譯器定義可以用在CMake的「調試」所有平臺建設類型? DEBUG似乎不存在。 (我想要記錄或任何只有當構建類型是調試。)

+0

http://stackoverflow.com/a/7725055/560648 – 2011-12-21 16:14:17

回答

13

我建議你添加自己的。 cmake符號CMAKE_C_FLAGS_DEBUG可以包含僅在調試模式下使用的標誌。例如:

set(CMAKE_C_FLAGS_DEBUG "-DMY_DEBUG") 

(也許,你將不得不使用"/DMY_DEBUG"爲Visual Studio。)

+0

我很想爲你的用戶名寫信給你,但是因爲我不喜歡重做已經爲你完成的工作通過你的工具,根據另一個答案,'NDEBUG'由CMake定義,因此它是最好的。 – 2015-04-09 23:30:18

+2

'NDEBUG'是C標準定義的一個符號,用於控制'assert()':s是否應該激活。就我個人而言,我認爲你不應該將它用於其他任何事情。 (感謝您對用戶名的讚美。) – Lindydancer 2015-04-10 13:43:21

+0

我反對使用'NDEBUG'。 FWIW,添加宏定義的正確方法(現在至少)是'add_definitions(-DMY_DEBUG)'。 [documentation](http://www.cmake.org/cmake/help/v3.0/command/add_definitions.html)表明它識別'-'或'/'作爲前綴,所以它應該是OS不可知的。 – 2015-06-07 01:10:09

61

CMake的增加-DNDEBUG到CMAKE_C_FLAGS_ {RELEASE,MINSIZEREL}默認。所以,你可以使用#ifndef NDEBUG

+7

雙重否定是令人討厭的:) – entheh 2017-06-14 12:35:28