我对这块研究不深
我的需求是把cpp代码编译为wasm的形式时,需要知道是debug/release
然而
尝试了一些办法 没有满足我的需求
尝试1:
#include <iostream>bool isDebugMode() {
#ifdef EMSCRIPTENbool isDebug = EM_ASM_INT({return (typeof console !== 'undefined' && console.debug) ? 1 : 0;});return isDebug;
#else
#ifdef NDEBUGreturn false; // 发布版
#elsereturn true; // 调试版
#endif
#endif
}int main() {if (isDebugMode()) {std::cout << "Debug mode" << std::endl;} else {std::cout << "Release mode" << std::endl;}return 0;
}
发现不准
尝试2:
#ifdef EMSCRIPTENbool isDebug = false;EM_ASM({if (typeof console !== 'undefined' && console.debug) {Module['isDebug'] = true;}});return isDebug;
#endif
发现还是不行
尝试3:
#ifdef __EMSCRIPTEN_DEBUG_SUPPORTED__// 调试模式下的代码
#else// 非调试模式下的代码
#endif
oh no 还是不行
尝试问了下 gpt 给我的回答
在 Emscripten 中,默认情况下,
调试模式和发布模式的编译输出是相同的,因此无法通过宏来准确判断当前是否处于调试模式。
所以我直接在编译的cmakelist.txt脚本中 添加如下
if (CMAKE_BUILD_TYPE STREQUAL "Debug")add_definitions(-DXXX_DEBUG)add_compile_options(-DXXX_DEBUG)
endif ()
在cpp中:
#ifdef XXX_DEBUG
//do something
#endif
源头解决问题,
如果你知道怎么准确的通过EMSCRIPTEN宏/js语句来实现,请留言评论一下 谢谢!