Visual Studio 2022 C++ CMake项目启用Hot Reload如何配置CMakeLists.txt
解决方案
核心配置逻辑
VS的Hot Reload(编辑并继续)功能仅针对MSVC编译器的Debug构建生效,为了不影响跨平台兼容性,所有相关配置要限定仅在MSVC + Debug场景下生效,需要分别配置编译、链接两个阶段的参数:
- 编译阶段:使用
/ZI参数生成支持编辑并继续的调试信息,替代默认的/Zi参数 - 链接阶段:开启
/INCREMENTAL增量链接,同时启用/EDITANDCONTINUE指令
具体修改
在你现有CMakeLists.txt的add_library语句之后,添加以下配置:
if (MSVC) # 仅Debug模式下配置热重载相关编译选项 target_compile_options(${PROJECT_NAME} PRIVATE "$<$<CONFIG:Debug>:/ZI>") # 仅Debug模式下配置热重载相关链接选项 target_link_options(${PROJECT_NAME} PRIVATE "$<$<CONFIG:Debug>:/INCREMENTAL;/EDITANDCONTINUE>") endif()
生效验证注意事项
- 清理之前的CMake构建缓存,重新生成项目后再编译,避免旧的编译产物影响配置生效
- 确认当前使用的是Debug构建类型,Release、RelWithDebInfo等构建类型不会开启相关配置
- 不要在Debug配置下额外开启全程序优化(
/GL)、链接时代码生成(/LTCG)等选项,这类选项会强制禁用增量链接与热重载功能 - 如果项目中还有其他依赖的动态库、或者启动用的可执行文件目标,需要对所有需要支持热重载的目标都添加上述配置
修改后完整CMakeLists.txt参考
cmake_minimum_required (VERSION 3.18) project (my-project) add_definitions (-DMY_PROJECT_EXPORTS) set (CMAKE_INCLUDE_CURRENT_DIR ON) set (CMAKE_AUTOMOC ON) set (CMAKE_AUTOUIC ON) set (CMAKE_AUTORCC ON) find_package (Qt5 COMPONENTS Core Gui Widgets REQUIRED) include_directories (${CMAKE_CURRENT_SOURCE_DIR}/../..) set (PROJECT_SRC # A bunch of files, i.e. Private/Canvas.cpp Private/View.cpp Private/Scene.cpp ) add_library (${PROJECT_NAME} SHARED ${PROJECT_SRC}) target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17) target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Widgets Qt5::Gui ) # 新增的MSVC热重载配置 if (MSVC) target_compile_options(${PROJECT_NAME} PRIVATE "$<$<CONFIG:Debug>:/ZI>") target_link_options(${PROJECT_NAME} PRIVATE "$<$<CONFIG:Debug>:/INCREMENTAL;/EDITANDCONTINUE>") endif()
内容的提问来源于stack exchange,提问作者Jepessen
相关产品推荐
相关产品推荐

