Visual Studio 2022中CMake多项目独立构建及依赖配置方法
在VS2022中实现独立CMake项目的同窗口管理与依赖配置
一、配置Engine模块(生成共享DLL)
- 在
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 )
- 在
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中实现同窗口管理
- 打开Visual Studio 2022,选择文件 > 打开 > 本地文件夹,浏览到
Engine目录并打开(此时VS会加载Engine的CMake项目)。 - 在解决方案资源管理器中,右键点击CMake目标,选择添加CMake项目。
- 浏览到
App目录下的CMakeLists.txt,选中后添加到当前工作区。 - 此时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
相关产品推荐
相关产品推荐

