【问题标题】:Enable hot reload in Visual Studio 2022 with C++ CMake projects使用 C++ CMake 项目在 Visual Studio 2022 中启用热重载
【发布时间】:2021-12-29 16:12:15
【问题描述】:

我有一个使用 Visual Studio 2022 处理的 C++ CMake 项目。我尝试在调试期间更改代码并单击“热重载”按钮,但我收到以下消息:

进行了无法编译的编辑

并且在 Visual Studio 输出窗口中出现以下消息:

“mylib.dll”中的“Canvas.cpp”未启用“编辑并继续”链接。确保启用 /INCREMENTAL 链接,并且不忽略 /EDITANDCONTINUE 指令。

考虑到这将是一个跨平台项目,在CMakeLists.txt 中执行此操作的正确方法是什么?

这是我的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
)

【问题讨论】:

    标签: c++ cmake hot-reload visual-studio-2022


    【解决方案1】:

    检查目标系统,如果构建系统是 msvc 以及使用的工具集版本应该允许您添加所有必要的限制。只需添加/INCREMENTAL 链接选项,以防满足正确条件。

    注意:我不确定是否所有这些条件都是必要的,以及哪个工具集版本将是第一个支持该功能的工具集版本,但您可以检查您需要支持的版本的选项。

    if (MSVC AND WIN32 AND NOT MSVC_VERSION VERSION_LESS 142)
    
        # option 1: put the following command before the creation of the first
        #           compiled target you want to apply the option to;
        #           this applies to targets created in this dir and subdirectories
        add_link_option($<$<CONFIG:Debug>:/INCREMENTAL>)
        add_compile_option($<$<CONFIG:Debug>:/ZI>)
    
        # option 2: apply the option on a per-target basis
        target_link_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:/INCREMENTAL>)
        target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:/ZI>)
    
    endif()
    

    如果您想使用选项 2 并且需要将其应用于许多目标,也许可以创建一个自定义函数,该函数可以无条件地应用于您想要应用该选项的所有目标。

    我不知道有什么替代方法可以让您为所有支持这种功能的编译器启用这种功能。

    您可能需要添加option 以通过cmake 缓存设置禁用此功能,并将其添加到if 中完成的检查中。

    您可能仍需要启用 Visual Studio 选项中的功能,如下所述:https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-enable-and-disable-edit-and-continue?view=vs-2022

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2022-07-31
      • 2021-12-23
      • 1970-01-01
      • 2021-12-15
      • 2021-12-02
      • 2022-06-13
      • 2022-10-15
      • 2021-10-27
      相关资源
      最近更新 更多