使用全Intel编译器时CMake的MSVC变量仍被启用是否正常?
问题结论
该现象完全符合预期,不存在配置错误。
原因说明
CMake的MSVC变量并非仅在使用微软官方MSVC cl编译器时才会启用,它的判定逻辑是识别当前是否处于Windows平台下兼容MSVC生态的构建环境:
- 你使用的是
NMake Makefiles生成器,底层依赖Visual Studio提供的构建工具链,你的归档程序、链接器均来自MSVC - Windows版本的Intel icl/ifort编译器本身就是为适配MSVC生态设计,完全兼容MSVC ABI,因此CMake会自动将
MSVC变量置为1
你遇到的报错是项目原有检测逻辑不严谨导致的,仅通过MSVC变量就判定用户使用了MSVC编译器,误拦截了Intel编译器的构建请求。
解决方案
修改项目CMakeLists.txt中的检测逻辑,在判断MSVC的同时补充编译器ID校验即可,示例修改如下:
# 原有错误逻辑 # if (MSVC) # message(FATAL_ERROR "Shared libraries are not support by OpenFAST with the MSVC build tool") # endif() # 修改后的正确逻辑 if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") message(FATAL_ERROR "Shared libraries are not support by OpenFAST with the MSVC build tool") endif()
如果项目仅使用C语言,把CMAKE_CXX_COMPILER_ID替换为CMAKE_C_COMPILER_ID即可。
内容的提问来源于stack exchange,提问作者raf
相关产品推荐
相关产品推荐

