Windows下用MSVC+CMake安装Eigen 3.4时C++标准支持测试失败咨询
问题描述
在Windows机器上通过VS2022的x64原生工具命令提示符运行CMake安装Eigen 3.4,执行命令:
c:\local\eigenbuild>cmake ..\eigen
得到如下输出:
Building for: Visual Studio 17 2022 Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621. The C compiler identification is MSVC 19.36.32537.0 The CXX compiler identification is MSVC 19.36.32537.0 Detecting C compiler ABI info Detecting C compiler ABI info - done Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools /MSVC/14.36.32532/bin/Hostx64/x64/cl.exe - skipped Detecting C compile features Detecting C compile features - done Detecting CXX compiler ABI info Detecting CXX compiler ABI info - done Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools /MSVC/14.36.32532/bin/Hostx64/x64/cl.exe - skipped Detecting CXX compile features Detecting CXX compile features - done Performing Test EIGEN_COMPILER_SUPPORT_CPP11 Performing Test EIGEN_COMPILER_SUPPORT_CPP11 - Failed Performing Test COMPILER_SUPPORT_std=cpp03 Performing Test COMPILER_SUPPORT_std=cpp03 - Failed ... skip snippet C:/local/eigen/doc/snippets/Array_initializer_list_23_cxx11.cpp because compiler does not support C++11 ...
令人惊讶的是,C11甚至C03的测试都失败了。这怎么可能?这对后续执行c:\local\eigenbuild>cmake --install .的安装操作有什么影响?
问题解答
为什么C11/C03测试失败?
- Eigen 3.4的CMake测试逻辑并非直接检测编译器的标准支持能力,而是通过编译带特定编译选项的测试代码来判断。针对MSVC编译器,Eigen的测试脚本可能默认添加了冲突的编译标志,或是测试代码本身在当前环境下存在兼容性问题,导致测试用例编译失败,但这完全不代表VS2022的MSVC编译器真的不支持C11或C03。
- VS2022搭载的MSVC 19.36版本完全支持C11,甚至兼容更高版本的C标准(如C17、C20),测试失败属于Eigen CMake配置脚本在MSVC环境下的适配问题,而非编译器本身的功能缺陷。
对cmake --install .的影响
- Eigen是纯头文件库,安装过程本质是将头文件复制到系统指定目录,同时生成配套的CMake配置文件。从你的输出来看,CMake仅跳过了部分代码片段的测试,并未终止配置流程,因此后续的
cmake --install .操作基本可以正常完成。 - 安装完成后,在自己的项目中使用Eigen时,只要手动指定正确的C++标准(比如在CMake中设置
CMAKE_CXX_STANDARD 11或更高版本),就能正常编译使用Eigen的全部功能,不受之前测试失败的影响。 - 唯一可能的小问题是,若项目未明确开启C11及以上标准,部分依赖C11特性的Eigen功能可能无法使用,但只要补全标准配置即可解决。
内容的提问来源于stack exchange,提问作者dnet
相关产品推荐
相关产品推荐

