我希望以下代碼只能在除錯模式下編譯
主程式
#ifdef __DEBUG__
int a=1;
std::cout<<a;
#endif
將以下內容添加到 cmake
add_compile_options(
"-D__DEBUG__"
)
或者
add_compile_options(
"$<$<CONFIG:DEBUG>:-D__DEBUG__>"
)
只是似乎沒有做任何事情。
我怎樣才能達到預期的行為?
uj5u.com熱心網友回復:
嘗試設定 CMAKE_CXX_FLAGS
set(CMAKE_CXX_FLAGS "-D__DEBUG__")
在源代碼中
#if defined(__DEBUG__)
int a=1;
std::cout<<a;
#endif
uj5u.com熱心網友回復:
選項1: NDEBUG
CMake已經NDEBUG在發布版本期間定義,只需使用它:
#ifndef NDEBUG
int a=1;
std::cout<<a;
#endif
選項 2: target_compile_definitions
配置是拼寫Debug,而不是DEBUG。既然你應該永遠,永遠使用目錄級別的命令(如add_compile_options),我會告訴你如何使用目標級別的命令:
target_compile_definitions(
myTarget PRIVATE "$<$<CONFIG:Debug>:__DEBUG__>"
)
也不需要使用過于通用的編譯選項命令。CMake 已經提供了一個抽象來確保前處理器定義可用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381122.html
上一篇:初學C語言的一些感想之談
下一篇:C 除錯-停止變數更改
