You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2022中CMake多项目独立构建及依赖配置方法

在VS2022中实现独立CMake项目的同窗口管理与依赖配置

一、配置Engine模块(生成共享DLL)

  1. 在Engine目录下创建CMakeLists.txt,内容如下:
cmake_minimum_required(VERSION 3.20)
project(Engine)

# 定义导出宏,用于Windows DLL符号导出
add_compile_definitions(ENGINE_EXPORTS)

# 添加DLL源文件(替换为你的实际源文件)
add_library(Engine SHARED
    src/engine_core.cpp
    include/engine/engine_core.h
)

# 公开头文件目录,让App可以引用Engine的头文件
target_include_directories(Engine PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)

# 导出CMake配置文件,方便App查找Engine
export(TARGETS Engine
    FILE ${CMAKE_CURRENT_BINARY_DIR}/EngineConfig.cmake
)

# 可选:安装规则,将DLL、头文件安装到系统或指定目录
install(TARGETS Engine
    RUNTIME DESTINATION bin
    ARCHIVE DESTINATION lib
    INCLUDES DESTINATION include
)
  1. 在Engine/include/engine/engine_core.h中添加导出符号定义:
#ifdef ENGINE_EXPORTS
#define ENGINE_API __declspec(dllexport)
#else
#define ENGINE_API __declspec(dllimport)
#endif

// 示例类,需要导出的接口
class ENGINE_API EngineCore {
public:
    void init();
    void update();
};

二、配置App模块(生成依赖Engine的可执行文件)

在App目录下创建CMakeLists.txt,内容如下:

cmake_minimum_required(VERSION 3.20)
project(App)

# 指定Engine的构建目录(替换为你的Engine实际构建路径,比如Engine/build/Debug)
set(Engine_DIR "../Engine/build/Debug")

# 查找Engine的CMake配置
find_package(Engine REQUIRED PATHS ${Engine_DIR})

# 添加可执行文件源文件(替换为你的实际源文件)
add_executable(App
    src/main.cpp
)

# 链接Engine库
target_link_libraries(App PRIVATE Engine)

# 构建后自动复制Engine的DLL到App的输出目录,避免运行时找不到DLL
add_custom_command(TARGET App POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        $<TARGET_FILE:Engine>
        $<TARGET_FILE_DIR:App>
)

三、在VS2022中实现同窗口管理

  1. 打开Visual Studio 2022,选择文件 > 打开 > 本地文件夹,浏览到Engine目录并打开(此时VS会加载Engine的CMake项目)。
  2. 在解决方案资源管理器中,右键点击CMake目标,选择添加CMake项目。
  3. 浏览到App目录下的CMakeLists.txt,选中后添加到当前工作区。
  4. 此时VS会创建一个包含两个独立CMake项目的工作区,你可以在CMake目标面板中看到Engine和App的所有构建目标。

四、实现独立构建

  • 构建Engine:在CMake目标面板中,只选择Engine或Engine.dll目标,点击构建按钮,仅会生成Engine的DLL文件,不会触发App的构建。
  • 构建App:选择App或App.exe目标,点击构建按钮。由于App的CMake配置中通过find_package引用了已构建好的Engine,因此不会重新构建Engine,仅生成依赖Engine DLL的可执行文件。

注意事项

  • 确保Engine和App的构建类型(Debug/Release)一致,否则会出现链接错误。
  • 如果修改了Engine的代码,需要手动重新构建Engine后,再构建App才能生效。
  • 若使用安装规则,可将Engine安装到固定目录,App的CMakeLists.txt中无需指定Engine_DIR,直接用find_package(Engine REQUIRED)即可。

内容的提问来源于stack exchange,提问作者Turgut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:17:45