使用Visual Studio 2022 + CMake时出现Fatal error C1083问题求助
问题:VS2022中CMake项目无法找到Eigen头文件
问题现象
基于CMake的项目在命令行和Visual Studio 2019中可正常构建,但在VS2022中,无论选择Visual Studio 17 2022还是Visual Studio 16 2019作为编译器,均无法构建,报错如下:
Fatal error C1083: Cannot open include file: 'Eigen/Dense': No such file or directory exists.
最小复现示例
test.cpp
#include <iostream> #include <Eigen/Dense> using Eigen::MatrixXd; int main() { MatrixXd m(2,2); m(0,0) = 3; m(1,0) = 2.5; m(0,1) = -1; m(1,1) = m(1,0) + m(0,1); std::cout << m << std::endl; }
CMakeLists.txt
cmake_minimum_required(VERSION 3.20 FATAL_ERROR) project(TEST) set (CMAKE_CXX_STANDARD 20) find_package(EIGEN3 REQUIRED) add_executable (${PROJECT_NAME} test.cpp ) target_link_libraries (${PROJECT_NAME} Eigen3::Eigen)
CMakePresets.json
{ "version": 2, "cmakeMinimumRequired": { "major": 3, "minor": 25, "patch": 0 }, "configurePresets": [ { "name": "windows-vs22", "displayName": "Windows x64 Release", "description": "Default Windows CMake preset", "generator": "Visual Studio 17 2022", "binaryDir": "${sourceDir}/build/${presetName}", "architecture": { "value": "x64", "strategy": "external" }, "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_MODULE_PATH": "${sourceDir}/conan/install/Release", "CMAKE_PREFIX_PATH": "${sourceDir}/conan/install/Release" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } } }, { "name": "windows-vs19", "displayName": "Windows x64 Release", "description": "Default Windows CMake preset", "generator": "Visual Studio 16 2019", "binaryDir": "${sourceDir}/build/${presetName}", "architecture": { "value": "x64", "strategy": "external" }, "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_MODULE_PATH": "${sourceDir}/conan/install/Release", "CMAKE_PREFIX_PATH": "${sourceDir}/conan/install/Release" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } } } ], "buildPresets": [ { "name": "windows-vs22", "displayName": "Release", "configurePreset": "windows-vs22" }, { "name": "windows-vs19", "displayName": "Release", "configurePreset": "windows-vs19" } ] }
补充信息(编辑1)
VS2022中配置VS2019编译器的CMake日志:
Working directory: C:/Users/USERNAME/Desktop/mini_eigen/build/windows-vs19 1> [CMake] -- CMake Version: 3.29.5-msvc4 1> [CMake] -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19045. 1> [CMake] -- The C compiler identification is MSVC 19.29.30154.0 1> [CMake] -- The CXX compiler identification is MSVC 19.29.30154.0 1> [CMake] -- Detecting C compiler ABI info 1> [CMake] -- Detecting C compiler ABI info - done 1> [CMake] -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped 1> [CMake] -- Detecting C compile features 1> [CMake] -- Detecting C compile features - done 1> [CMake] -- Detecting CXX compiler ABI info 1> [CMake] -- Detecting CXX compiler ABI info - done 1> [CMake] -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped 1> [CMake] -- Detecting CXX compile features 1> [CMake] -- Detecting CXX compile features - done 1> [CMake] -- Conan: Component target declared 'Eigen3::Eigen' 1> [CMake] -- Configuring done (4.6s) 1> [CMake] -- Generating done (0.0s) 1> [CMake] -- Build files have been written to: C:/Users/USERNAME/Desktop/mini_eigen/build/windows-vs19 1> Extracted CMake variables. 1> Extracted source files and headers. 1> Extracted code model. 1> Extracted toolchain configurations. 1> Extracted includes paths. 1> CMake generation finished.
排查线索
- 检查VS2022的CMake缓存:打开
build目录下的CMakeCache.txt,确认CMAKE_PREFIX_PATH和CMAKE_MODULE_PATH的值是否与命令行一致,是否指向正确的Conan安装目录。 - 验证Eigen安装路径:进入
${sourceDir}/conan/install/Release,确认是否存在include/Eigen目录及其中的头文件。 - 手动执行CMake命令:在VS2022开发者命令提示符中,运行
cmake --preset windows-vs22完成配置,再执行cmake --build --preset windows-vs22,看是否能正常构建,排除VS集成层面的问题。 - 对比项目包含路径:在VS2022中右键项目→属性→C/C++→常规→附加包含目录,查看是否包含Eigen的头文件路径,与VS2019的设置做对比。
- 清理缓存重新生成:删除
build目录下所有文件,重新在VS2022中生成CMake项目,避免旧缓存干扰。
内容的提问来源于stack exchange,提问作者sebwr
相关产品推荐
相关产品推荐

