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

CMake生成VS2022解决方案遇未解析项目引用问题求助

CMake生成VS2022解决方案后项目引用未解析依赖的问题排查与修复

问题根源

你的CMake配置存在两处明确错误,这是导致VS中出现Microsoft.VisualStudio.ProjectSystem.References.UnresolvedBuildDependencyProjectReference错误的核心原因,并非CMake与VS的兼容性Bug:

  1. B项目中未定义${Hdr}变量却在目标构建中使用
    在B/CMakeLists.txt里,你执行了add_executable(${PROJECT_NAME} ${Hdr} ${Src}),但未像A项目那样通过file(GLOB_RECURSE)定义Hdr变量。CMake会将未定义变量视为空值,这会干扰VS项目系统对目标文件结构的解析,进而引发依赖引用识别异常。

  2. B项目的target_include_directories包含无效路径
    如果B目录下不存在inc文件夹,target_include_directories(${PROJECT_NAME} BEFORE PUBLIC inc PRIVATE src)中的PUBLIC inc会添加一个无效的包含路径,这也会影响VS对项目依赖关系的正确识别。

另外,子项目中重复调用project()指令虽不违反CMake语法,但会增加VS项目结构的复杂度,建议子项目仅专注于目标构建,无需重新定义项目名称(根目录的project(Test)已足够定义整个解决方案)。

修复后的配置代码

根目录CMakeLists.txt(无需修改)

cmake_minimum_required(VERSION 3.24)

project(Test)

add_subdirectory(A)
add_subdirectory(B)

A/CMakeLists.txt(优化:移除重复的project())

cmake_minimum_required(VERSION 3.24)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

file(GLOB_RECURSE Hdr CONFIGURE_DEPENDS inc/*)
file(GLOB_RECURSE Src CONFIGURE_DEPENDS src/*)

add_library(A SHARED ${Hdr} ${Src})
target_include_directories(A BEFORE PUBLIC inc PRIVATE src)

set_property(TARGET A APPEND PROPERTY PUBLIC_HEADER ${Hdr})

B/CMakeLists.txt(修复变量错误与无效路径)

cmake_minimum_required(VERSION 3.24)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 若B存在头文件,取消注释下方行;无则删除
# file(GLOB_RECURSE Hdr CONFIGURE_DEPENDS inc/*)
file(GLOB_RECURSE Src CONFIGURE_DEPENDS src/*)

# 根据是否有头文件选择对应参数
add_executable(B ${Src})
# 若有头文件则改为:add_executable(B ${Hdr} ${Src})

# 若B无inc目录则移除PUBLIC inc;有则保留
target_include_directories(B BEFORE PRIVATE src)
target_link_libraries(B PRIVATE A)

验证操作

  1. 删除已生成的tmp目录,重新执行CMake生成指令:
cmake.exe -S . -B tmp
start tmp\Test.sln
  1. 打开VS2022后,检查B项目的References:此时双击A引用或查看属性,将不再出现未解析依赖错误,项目可正常编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:45:46